Hibernate / JPA:是否可以在单个查询中检索异构实体?
我有2个实体:EntityA和EntityB。
它们是不相关的,我不能将它们放在inheritance树中,因为某些限制超出了本问题的范围。
但是我需要在同一个JPQL或HQL查询中获得包含两个实体的所有实例的混合List。 这可能是JPA甚至直接使用Hibernate吗?
我需要这样的东西:
FROM EntityA WHERE fieldA=1 UNION FROM EntityB WHERE fieldB="aa"
任何提示?
好吧,我终于明白了。
它应该使实体实现一个通用接口(甚至不需要在Hibernate上声明这个接口)。
然后,可以完成这样的查询:
FROM my.package.CommonInterface obj WHERE obj IN (FROM EntityA WHERE fieldA=1) OR obj IN (FROM EntityB WHERE fieldB='a')
这样,您可以检索List
。
问题解决了。
最好的事情是执行两个查询。
但如果你必须:
您可以创建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)
这很脏,你可能必须仔细查看语法。
问候。
- SQL错误:0,SQLState:08S01通信链接失败
- 例外:无法解析配置:hibernate.cfg.xml
- 为什么每次运行我的应用程序时Hibernate都会插入重复的记录?
- “Spring事务”和“Hibernate事务”之间有什么区别
- 让JPA / Hibernate复制“ON DELETE SET NULL”function
- 如何在spring MVC web应用程序中确认电子邮件addrees
- Spring 4.1.0.RELEASE和Hibernate 4.3.6.Final的依赖性问题
- 使用hibernate正确使用Spring mvc 3(Spring ORM)
- Hibernate和@JoinFormula:org.hibernate.mapping.Formula无法强制转换为org.hibernate.mapping.Column