Hibernate/JPA:是否可以在单个查询中检索异构实体?
我有 2 个实体:EntityA 和 EntityB。
它们是不相关的,并且由于超出此问题范围的某些限制,我无法将它们放入继承树中。
但我需要在同一个 JPQL 或 HQL 查询中获取包含两个实体的所有实例的混合列表。这可以直接使用 JPA 甚至 Hibernate 实现吗?
我需要这样的东西:
FROM EntityA WHERE fieldA=1
UNION
FROM EntityB WHERE fieldB="aa"
有什么提示吗?
I have 2 entities: EntityA and EntityB.
They are unrelated, and I cannot put them in a Inheritance tree for some restrictions out of the scope of this question.
But I need to get in the same JPQL or HQL query a mixed List containing all the instances of both entities. Is this possible with JPA or even Hibernate directly?
I need somethign like this:
FROM EntityA WHERE fieldA=1
UNION
FROM EntityB WHERE fieldB="aa"
Any hint?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(2)
落花随流水2024-12-10 08:20:48
最好的办法是执行两个查询。
但如果您必须:
您可以创建一个 POJO 来检索它们:
class EntityAandEntityB {
EntityA a;
EntityB b;
long idA;
long idB;
int fieldA;
String fieldB;
public EntityAandEntityB(long idA, long IdB, int fieldA, String fieldB) {
this.a = new EntityA(idA, fieldA);
this.b = new EntityB(idB, fieldB);
}
}
那么您的查询将是:
select new package.EntityAandEntityB(a.idA, a.fieldA, b.idB, b.fieldB) from (
(select idA, fieldA from EntityA) a
UNION
(select idB, fieldB from EntityB) b)
这是脏的,您可能必须仔细查看语法。
问候。
~没有更多了~
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
好吧,我终于想通了。
让实体实现一个公共接口就足够了(甚至不需要在 Hibernate 上声明这个接口)。
然后,可以完成这样的查询:
这样,您可以检索
List
。问题解决了。
Well, I finally figured it out.
It is enought to make the entities implement a common interface (it is not even needed to declare this interface on Hibernate).
Then, a query like this can be done:
This way, you retrieve a
List<CommonInterface>
.Problem solved.