Jpa命名本机查询无结果怎么办呢?

来源:爱站网时间:2021-11-13编辑:网友分享
最近在研究着课题,突然被同事问了一句:Jpa命名本机查询无结果怎么办呢??爱站技术小编愣了一下,马上去写了一篇文章,让所有不知道这个的人都可以有资料可以看看。

问题描述


我正在尝试将Java Spring Cloud微服务连接到oracle数据库。我的问题是,当我调用从函数传递参数的本机查询时,此查询不会返回任何内容,而如果我将其参数直接插入查询中,则一切正常。

ENTITY

@Entity
@Table(name = "######")
@SqlResultSetMapping(
        name    = "EmployeeJobDTO",
        classes = @ConstructorResult(
                targetClass = EmployeeJobDTO.class,
                columns     = {
                        @ColumnResult(name = "idStf",           type = String.class),
                        @ColumnResult(name = "personalNumber",  type = String.class),
                        @ColumnResult(name = "name",            type = String.class),
                        @ColumnResult(name = "surname",         type = String.class),
                        @ColumnResult(name = "functionMain",    type = String.class),
                        @ColumnResult(name = "idDrr",           type = String.class),
                        @ColumnResult(name = "functionShift",   type = String.class),
                        @ColumnResult(name = "shiftOldCode",    type = String.class),
                        @ColumnResult(name = "shiftCode",       type = String.class),
                        @ColumnResult(name = "idJob",           type = String.class),
                        @ColumnResult(name = "jobType",         type = String.class),
                        @ColumnResult(name = "jobStatus",       type = String.class),
                        @ColumnResult(name = "plannedFrom",     type = String.class),
                        @ColumnResult(name = "plannedTo",       type = String.class),
                        @ColumnResult(name = "actualFrom",      type = String.class),
                        @ColumnResult(name = "actualTo",        type = String.class)
                }) 
        )
@NamedNativeQueries({
    @NamedNativeQuery(
            name                = "findDayJobsByDateAndDepartment",
            resultClass         = EmployeeJobDTO.class,
            resultSetMapping    = "EmployeeJobDTO",
            query   = "select to_char(st.XXXX) as idStf," + 
                    "st.XXXX as personalNumber," + 
                    "st.XXXX as name," + 
                    "st.XXXX as surname," + 
                    "sp.XXXX as functionMain," + 
                    "dr.XXXX as idDrr," + 
                    "dr.XXXX as functionShift," + 
                    "dr.XXXX as shiftOldCode," + 
                    "dr.XXXX as shiftCode," + 
                    "jb.XXXX as idJob," + 
                    "jb.XXXX as jobType," + 
                    "substr(jb.XXXX, 0, 1) as jobStatus," + 
                    "jb.XXXX as plannedFrom," + 
                    "jb.XXXX as plannedTo," + 
                    "jb.XXXX as actualFrom," + 
                    "jb.XXXX as actualTo " + 
                    "from XXXXXX jb " + 
                    "inner join XXXXXX dr on jb.XXXX = dr.XXXX " + 
                    "inner join XXXXXX st on jb.XXXX = st.XXXX " + 
                    "inner join XXXXXX sr on sr.XXXX = jb.XXXX " + 
                    "inner join XXXXXX sp on sp.XXXX = jb.XXXX " +
                    "where dr.XXXX=?1 and dr.XXXX = 'A' and sr.XXXX=?2"
            ),
    @NamedNativeQuery(
            name                = "findDayJobsByDateAndDepartmentFixedParam",
            resultClass         = EmployeeJobDTO.class,
            resultSetMapping    = "EmployeeJobDTO",
            query   = "select to_char(st.XXXX) as idStf," + 
                    "st.XXXX as personalNumber," + 
                    "st.XXXX as name," + 
                    "st.XXXX as surname," + 
                    "sp.XXXX as functionMain," + 
                    "dr.XXXX as idDrr," + 
                    "dr.XXXX as functionShift," + 
                    "dr.XXXX as shiftOldCode," + 
                    "dr.XXXX as shiftCode," + 
                    "jb.XXXX as idJob," + 
                    "jb.XXXX as jobType," + 
                    "substr(jb.XXXX, 0, 1) as jobStatus," + 
                    "jb.XXXX as plannedFrom," + 
                    "jb.XXXX as plannedTo," + 
                    "jb.XXXX as actualFrom," + 
                    "jb.XXXX as actualTo " + 
                    "from XXXXXX jb " + 
                    "inner join XXXXXX dr on jb.XXXX = dr.XXXX " + 
                    "inner join XXXXXX st on jb.XXXX = st.XXXX " + 
                    "inner join XXXXXX sr on sr.XXXX = jb.XXXX " + 
                    "inner join XXXXXX sp on sp.XXXX = jb.XXXX " +
                    "where dr.XXXX='20200224' and dr.XXXX = 'A' and sr.XXXX='SFA'"
            )
})
public class EmployeeJobEntity {
    //.............. follows the code .....
}

存储库

public interface EmployeeJobEntityRepository extends CrudRepository {
    // This query return [] i tryed @Param annotation and the result not change.
    @Query(name = "findDayJobsByDateAndDepartment", nativeQuery = true)
    public List findDayJobsByDateAndDepartment(String date, String department);

    // This query return the data OK
    @Query(name = "findDayJobsByDateAndDepartmentFixedParam", nativeQuery = true)
    public List findDayJobsByDateAndDepartmentFixedParam();
}

APPLICATION.YML

logging:
  level:
    org:
      hibernate:
        SQL: DEBUG
        type:
          descriptor:
            sql:
              BasicBinder: TRACE
server:
  port: 8100
spring:
  application:
    name: employee
  datasource:
    driver-class-name: oracle.jdbc.OracleDriver
    url: jdbc:oracle:thin:@XXXX-XXX.XX.it::
    password: XXXX
    username: XXXX
    hikari:
      connection-test-query: select 1 from dual
      minimum-idle: 1
      idle-timeout: 240000
      max-lifetime: 360000
      maximum-pool-size: 10
      pool-name: XXXX
  jpa:
    hibernate:
      ddl-auto: none
    show-sql: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.Oracle10gDialect

思路:


您需要使用spring的注释@Param,对于您的情况,代码如下:

@Query(name = "findDayJobsByDateAndDepartment", nativeQuery = true)
    public List findDayJobsByDateAndDepartment(@Param("date") String date, @Param("department") String department);

 

以上内容就是爱站技术频道小编为大家分享的Jpa命名本机查询无结果怎么办呢?看完以上分享之后,大家应该都知道怎么操作了吧。

上一篇:如何决定创建一个新的子类

下一篇:如何获取另一个文件中一个类中已经存在的对象的数据,并将其用于Java中另一个文件中的另一个类?

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载