简体   繁体   English

Hibernate / JPA将本机查询的结果映射到非实体持有实体

[英]Hibernate/JPA map Result of native Query to non-Entity holding Entities

I do have 3 Entities and want to Cross-Join them. 我确实有3个实体,想交叉加入。 As I do not need to create a new Entity for this I just wanted to map the by fetching with a native Query: 因为我不需要为此创建新的实体,所以我只想通过使用本机查询获取来映射它:

EntityA{
    ...
    String someValue;
}

EntityB{
    ...
    String someValue;
}

EntityC{
    ...
    String someValue;
}

And the CrossJoined Object 和交叉连接的对象

CrossJoinedFoo{
    EntityA entityA;
    EntityB entityB;
    EntityC entityC;
}

I am using it like: 我使用它像:

private static final String _SELECT_CROSS_JOIN_ENTITIES = "SELECT * FROM "
            + "EntityA"
            + ", "
            + "EntityB"
            + ", "
            + "EntityC"
            + " WHERE (1=1) "
            + " AND " + "EntityA.someValue = :someValue"
            + " AND " + "EntityB.someValue = :someValue"
            + " AND " + "EntityC.someValue = :someValue";

Query query = entityManager.createNativeQuery(_SELECT_CROSS_JOIN_ENTITIES);
query.setParameter(":someValue", "foo");

How can I achieve this behavior? 我该如何实现这种行为?

You can go for a HQL query and use the result class strategy. 您可以进行HQL查询并使用结果类策略。 Just remember to add a constructor to CrossJoinedFoo accepting 3 entities in appropriate order: 只需记住将一个构造函数添加到CrossJoinedFoo即可以适当的顺序接受3个实体:

private static final String _SELECT_CROSS_JOIN_ENTITIES = 
            "SELECT new my.package.CrossJoinedFoo(a,b,c) FROM "
            + "EntityA a"
            + ", "
            + "EntityB b"
            + ", "
            + "EntityC c"
            + " WHERE (1=1) "
            + " AND " + "a.someValue = :someValue"
            + " AND " + "b.someValue = :someValue"
            + " AND " + "c.someValue = :someValue";

Query query = entityManager.createQuery(_SELECT_CROSS_JOIN_ENTITIES);
query.setParameter(":someValue", "foo");

List<CrossJoinedFoo> result = query.list();

Just remember to change the package to an appropriate one. 只需记住将软件包更改为适当的软件包即可。

Using @SqlResultSetMapping with @ConstructorResult 使用@SqlResultSetMapping@ConstructorResult

Beware that the resulted entities won't be managed 请注意,将不会管理结果实体

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用Spring JPA将SQL查询结果映射到Java对象(在非实体类中) - Map sql query result to java object(in Non-Entity class) using spring jpa Hibernate UserType将@Formula结果映射到非实体自定义对象 - Hibernate UserType to map @Formula result to non-entity custom object 如何将连接查询映射到JPA中的非实体类? - How to map join query to non-entity class in JPA? 使用非实体 class 作为结果 class 进行本机查询 - use a non-entity class as a result class for native query Hibernate - createNativeQuery带有“非实体类”结果 - Hibernate - createNativeQuery with “non-entity class” result Spring 数据 JPA map 存储过程结果从多个数据源到非实体 POJO - Spring Data JPA map the stored procedure result to Non-Entity POJO from multiple data source 在非实体Java Bean中映射多个休眠实体 - Mapping multiple hibernate Entities inside non-entity java bean 如何使用Hibernate将SQL查询的结果最佳映射到非实体Java对象? - How to best map results from an SQL query to a non-entity Java object using Hibernate? 注释包含 JPA 中的非实体类的 Map - Annotation a Map containig a non-entity class in JPA 是否可以调用本机查询并将结果集存储在非实体对象中? - Is it possible to call a native query and store the result set in a non-entity object?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM