Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有hql列名的JPA映射实体_Java_Jpa_Hql - Fatal编程技术网

Java 具有hql列名的JPA映射实体

Java 具有hql列名的JPA映射实体,java,jpa,hql,Java,Jpa,Hql,我正在尝试使用RowMapper这样的功能,它为我提供了ResultSet,这样我就可以通过在JPA中使用ResultSet.getString(“column_name”)来设置pojo的属性 但JPA似乎没有提供这样的功能 StringBuffer rcmApprovalSqlString = new StringBuffer(QueryConstants.APPROVAL_DETAILS_SQL); List<ApprovalDTO> finalApprovalList = n

我正在尝试使用RowMapper这样的功能,它为我提供了ResultSet,这样我就可以通过在JPA中使用
ResultSet.getString(“column_name”)
来设置pojo的属性

但JPA似乎没有提供这样的功能

StringBuffer rcmApprovalSqlString = new StringBuffer(QueryConstants.APPROVAL_DETAILS_SQL);
List<ApprovalDTO> finalApprovalList = null;

Query rcmApprovalTrailQuery = getEntityManager().createQuery(rcmApprovalSqlString.toString());
rcmApprovalTrailQuery.setParameter(1,formInstanceId);

List<?> approvalList = rcmApprovalTrailQuery.getResultList();
finalApprovalList = new ArrayList<ApprovalDTO>();
for(Object approvalObj : approvalList){
    Object[] obj = (Object[]) approvalObj;

    ApprovalDTO approvalDTO = new ApprovalDTO();
    approvalDTO.setDeptName(obj[0]!=null? obj[0].toString() : NAPSConstants.BLANK_STRING);
    approvalDTO.setUserId(obj[1]!=null? obj[1].toString()+" "+obj[2].toString() : NAPSConstants.BLANK_STRING);

    approvalDTO.setComment(obj[6]!=null? obj[6].toString() : NAPSConstants.BLANK_STRING);

    finalApprovalList.add(approvalDTO);
}

在JPA2.1中,您很有可能使用
SqlResultSetMapping
。您可以在此处找到更多信息,例如:

我们的想法是,不要像以前那样做:

List<Object[]> results = this.em.createNativeQuery("SELECT a.id, a.firstName, a.lastName, a.version FROM Author a").getResultList();

    results.stream().forEach((record) -> {
            Long id = ((BigInteger) record[0]).longValue();
            String firstName = (String) record[1];
            String lastName = (String) record[2];
            Integer version = (Integer) record[3];
    });
然后在查询中使用映射(通过指定映射名称):

List<Author> results = this.em.createNativeQuery("SELECT a.id as authorId, a.firstName, a.lastName, a.version FROM Author a", "AuthorMapping").getResultList();
List results=this.em.createNativeQuery(“选择a.id作为authorId,a.firstName,a.lastName,a.version FROM Author a”,“AuthorMapping”).getResultList();

我只能使用本机查询获取所需结果,而不能使用NamedNativeRequesty-

Query rcmApprovalTrailQuery = getEntityManager().createNativeQuery(rcmApprovalSqlString.toString(),"ApprovalMapping");
            rcmApprovalTrailQuery.setParameter(1,formInstanceId);

            List<ApprovaldetailsTbl> approvalList = rcmApprovalTrailQuery.getResultList();
SqlResultsMapping-

@SqlResultSetMapping(name="ApprovalMapping",
        entities=@EntityResult(entityClass=ApprovaldetailsTbl.class
            ))
请注意,如果在select查询中未使用*,则需要将所有列名映射到实体字段名,例如-

fields = {
                        @FieldResult(name = "col1", column = "alais1"),
                        @FieldResult(name = "col2", column = "alais2")})

谢谢你的回复。使用getEntityManager().createQuery(“选择a.id作为authorId,a.firstName,a.lastName,a.VersionfromAuthor a”,“AuthorMapping”).getResultList()进行HQL查询是否可行;对于HQL,您可以使用@NamedQuery,然后列出authors=entityManager.createNamedQuery(…).getResultList();我已经尝试了您的链接提供的所有组合,并且解决方案似乎仅适用于NamedNaviRequesty,我无法使用相同的名称查询此链接可能会有所帮助-[link]
String RCM_APPROVAL_DETAILS_SQL = "select * "+
                " from  ApprovalDetails_TBL ad " +
                " where ad.ApprovalDetailsId = ? ";
@SqlResultSetMapping(name="ApprovalMapping",
        entities=@EntityResult(entityClass=ApprovaldetailsTbl.class
            ))
fields = {
                        @FieldResult(name = "col1", column = "alais1"),
                        @FieldResult(name = "col2", column = "alais2")})