2017-07-06 58 views
0

遷移到JPA在我們的遺留Hibernate相關的代碼,我轉換爲JPA後使用變壓器的能力,我們曾與變壓器一個直接基於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(這仍然是使用直接SQL),我不能再使用Transformer一步,因爲JPA語法不支持它。

如果我省略了變壓器一步,我得到一個大小寫錯誤如下關於我的領域之一,

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語法中使用它。

回答

0

嘗試:

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()。並申請overided變壓器setResultTransformer()