1

我想在一个非实体类中加入两个实体,这两个实体将作为类的属性。

以此为例:

@Entity
public class A {
}

@Entity
public class B {
}

public class C {
    private A a;
    private B b;
}

我找到了一个使用 SqlResultSetMapping 的解决方案,但我不想手动指定 A 和 B 的每一列,因为会有 20+ 列。

我发现的另一个解决方案是使用 JPQL 查询,该查询将返回一个对象数组 results [ ],其中 results[0] 是 A,results[1] 是 B。

我的想法是两者的结合,我是这样看的:

@SqlResultSetMapping(targetClass=C.class, 
entities={
@EntityResult (targetClass=A.class)
@EntityResult (targetClass=B.class)
}

鉴于 A 和 B 都有多个列,这是解决我的问题的最佳方法?

4

1 回答 1

1

如果您使用的是 JPQL(它也应该在休眠状态下工作),您可以利用结果集类策略。

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();
于 2017-05-02T11:29:10.677 回答