【问题标题】:Lost the ability to use Transformers after migrating to JPA from Hibernate从 Hibernate 迁移到 JPA 后失去使用 Transformers 的能力
【发布时间】:2017-07-07 03:42:05
【问题描述】:

在我们将转换为 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(仍在使用 Direct SQL),我不能再使用 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(小写)。我的猜测是 Transformer 在这里是必需的,但我不能将它与新的 JPA 语法一起使用。

【问题讨论】:

    标签: hibernate jpa


    【解决方案1】:

    试试这个:

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

    来自 AliasToBeanResultTransformer 源示例:

     *    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();
    

    您也可以扩展 AliasToBeanResultTransformer 并覆盖方法 transformTuple()。并为 setResultTransformer() 应用重写的转换器

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-25
      • 2013-05-11
      • 2018-04-15
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 2011-11-16
      • 2011-04-24
      相关资源
      最近更新 更多