Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
从Hibernate迁移到JPA后,无法使用转换器_Hibernate_Jpa - Fatal编程技术网

从Hibernate迁移到JPA后,无法使用转换器

从Hibernate迁移到JPA后,无法使用转换器,hibernate,jpa,Hibernate,Jpa,在我将转换为JPA的传统Hibernate依赖代码中,我们有一个带转换器的直接基于SQL的查询 // 1. Create Hibernate Query object org.hibernate.Query query = sessionFactory.getCurrentSession().createQuery(sql.toString()); // 2. Run a transformer query.setResultTransformer(Transformers.aliasToBe

在我将转换为JPA的传统Hibernate依赖代码中,我们有一个带转换器的直接基于SQL的查询

// 1. Create Hibernate Query object
org.hibernate.Query query = sessionFactory.getCurrentSession().createQuery(sql.toString());

// 2. Run a transformer
query.setResultTransformer(Transformers.aliasToBean(User.class));

// 3. Obtain Result List
List results = query.list();
但是现在我已经将其转换为JPA(仍然使用DirectSQL),我不能再使用Transformer步骤,因为JPA语法不支持它

如果省略Transformer步骤,我会得到一个区分大小写的错误,关于我的一个字段

 org.hibernate.QueryException: could not resolve property: ID of: USER_T
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:62)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:56)
at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1859)
因为我的UserT对象的字段名为
id
(小写)。我猜这里需要转换器,但我不能将它与新的JPA语法一起使用。

试试这个:

org.hibernate.Query query = sessionFactory.getCurrentSession().createQuery(sql.toString());
query.createAlias("id", "ID")
query.setResultTransformer(Transformers.aliasToBean(User.class));

从Alias到BeanResultTransformer源示例:

 *    List resultWithAliasedBean = s.createCriteria(Enrolment.class)
 *          .createAlias("student", "st")
 *          .createAlias("course", "co")
 *          .setProjection( Projections.projectionList()
 *                  .add( Projections.property("co.description"), "courseDescription" )
 *          )
 *          .setResultTransformer( new AliasToBeanResultTransformer(StudentDTO.class) )
 *          .list();
您还可以将Alias扩展为BeanResultTransformer并覆盖方法transformTuple()。并为setResultTransformer()使用外部变压器