【问题标题】:JPA 2.0 Native Query Result Mapping to a BeanJPA 2.0 本机查询结果映射到 Bean
【发布时间】:2014-06-25 08:03:27
【问题描述】:

我有一个复杂的本地查询。所以使用 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();

但是,结果,我得到了一个对象列表而不是用户行为列表。即使我指定了结果类,我也会收到错误,因为 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 中??

【问题讨论】:

  • 在 Stackoverflow 上查看此答案:stackoverflow.com/questions/13012584/… 使用 JPA 2.0 似乎无法实现您想要实现的目标。使 UserBehavior 成为 @Entity 对您没有解决方案吗?从数据库检索结果后,您仍然可以将其数据复制到 DTO 或 POJO 中。也许我们需要更多关于您的上下文的信息。

标签: hibernate jpa


【解决方案1】:

不可能使 POJO(用户)成为实体。所以为了解决这个问题,我手动映射了我返回的对象数组列表。

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]));

        }

【讨论】:

    猜你喜欢
    • 2019-07-25
    • 2011-11-27
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2015-02-15
    • 2015-06-08
    • 2022-01-11
    相关资源
    最近更新 更多