我想在非实体类中加入两个实体,它们将两个实体作为类的属性。
以此为例:
@Entity
public class A {
}
@Entity
public class B {
}
public class C {
private A a;
private B b;
}
我找到了一个使用SqlResultSetMapping的解决方案,但我不想手动指定A和B的每一列,因为会有20多列。
我发现的另一个解决方案是使用JPQL查询返回一个Object数组结果[],其中结果[0]为A,结果[1]为B.
我的想法是两者的结合,我看到它是这样的:
@SqlResultSetMapping(targetClass=C.class,
entities={
@EntityResult (targetClass=A.class)
@EntityResult (targetClass=B.class)
}
鉴于A和B都有多列,这是解决问题的最佳方法吗?
答案 0 :(得分:1)
如果您正在使用JPQL(它也应该在hibernate中工作),您可以利用结果集类策略。
1)将构造函数添加到C类:
public C(A aEntity, B bEntity){
this.a = aEntity;
this.b = bEntity;
}
2)创建普通查询并使用具有完全限定C
类名的NEW运算符,该名称将A和B作为其构造函数参数:
Query query = session.createQuery("select new com.mypkg.C(a as aEntity, b as bEntity)
from A a, B b where a.id = b.a_id");
List<C> cList = (List<C>)query.list();