我在数据库中有三个表(名为A,B和C):
A ----- ID B_ID -----
B ----- ID C_ID -----
C ----- ID -----
我分别有A,B和C类。
public class A{
private Long id;
private Long b_id;
}
public class B{
private Long id;
private Long c_id;
}
public class C{
private Long id;
}
从类“A”的代码中可以看出,我已经映射了类B的ID而不是对象,以下:
<property name="b_id" column="B_ID" type="java.lang.Long" not-null="false">
现在我需要为ID“C”执行此操作,即我可以直接使用
获取A的关联C对象的ID
a.getC_id();
我怎样才能做到这一点?这应该这样做,以便当Hibernate从数据库中读取A对象时,C的ID被连接到查询,即没有额外的查询或子查询(a.getB()。getC_id()是不可接受的)
答案 0 :(得分:1)
首先创建一个DTO对象,
public class ADTO {
private Long a_id;
private Long b_id;
private Long c_id;
public ADTO(Long a_id,Long b_id,Long c_id){
this.a_id = a_id;
this.b_id = b_id;
this.c_id = c_id;
}
}
现在使用查询
select new com.foo.ADTO(a.id,b.id,c.id) from A a, B b, C c where
a.id = b.a_id and b.id = c.b_id
您甚至可以使用课程A
执行此操作,我已避免,因为我不确定A
和C
之间的关系是否会发送到one to one
或不。 DTO始终是安全的。
答案 1 :(得分:1)
作为ManuPK答案的变体,您还可以将A的实例放入DTO。
public class AWithCID {
public final A a;
public final cID;
public AWithCID(A a, Long cID) { this.a = a; this.cID = cID; }
}
select new AWithCID(a, b.cID) from A a, B b where a.bID = b.id