JPA 2.0本机查询结果映射到Bean

时间:2014-05-08 05:06:39

标签: hibernate jpa

我有一个复杂的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?

2 个答案:

答案 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)