我有一个复杂的Native Query。因此,使用JPA 2.0(使用Hibernate实现),我已经声明了一个NamedNativeQuery
@NamedNativeQuery(name="latestStatusByUser",
query=" with latest_behav_status as "
+ " (select .......),"
+ " latest_behav_avail as ("
+ " .......) "
+ " select ........"
+ " from user "
+ " left outer join latest_behav_status lbs .... "
+ " left outer join...."
所以在我的代码中我打电话:
List<UserBehavior> rec = entityManager.createNamedQuery("latestStatusByUser").getResultList();
但是,作为Result,我得到一个Object列表而不是UserBehavior列表。即使我指定结果类,我也会得到错误,因为UserBehavior是POJO而不是实体。
使用命名查询,我可以使用新的:
select new org.project.UserBehavior(user_i...) from
但是如何处理NativeQuery和JPA2.0(JPA2.1附带解决方案,使用@ConstructorResult):
http://mariemjabloun.blogspot.com/2014/05/jpa-mapping-native-query-to-bean-pojo.html
所以问题是如何使用JPA 2.0将结果集映射到Bean?
答案 0 :(得分:0)
无法使POJO(用户)成为实体。所以为了解决这个问题,我手动映射了我返回的Object of Array列表。我的帖子http://mariemjabloun.blogspot.com/2014/09/jpa-20-native-query-result-mapping-to.html
中的更多详情List<User> records = entityManager.createNamedQuery("latestStatusByUser").getResultList();
List<User> userRecords = new ArrayList<User>();
Iterator it = records.iterator( );
while (it.hasNext( )) {
Object[] result = (Object[])it.next(); // Iterating through array object
userRecords.add(new User(result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7]));
}
答案 1 :(得分:0)