1
我從我們建立使用JPA(TopLink的) 模型具有生成SQL的一個問題
許多SQL的調用的結果,我們有以下TopLink的JPA孩子取的兒童
@Entity
@Table(name = "T_TEST_A")
@Access(AccessType.FIELD)
public class TTestA implements Serializable {
@Id
@Column(name = "A_ID")
private String id;
@OneToOne
@PrimaryKeyJoinColumn
private D detail;
@OneToMany()
@JoinTable(name = "T_TEST_JOIN", joinColumns = @JoinColumn(name = "TABLE_FK"), inverseJoinColumns = @JoinColumn(name = "B_ID"))
private List<B> childrens;
...
}
@Entity
@Table(name = "T_TEST_B")
@Access(AccessType.FIELD)
public class TTestB implements Serializable {
@Id
@Column(name = "B_ID")
private String id;
@OneToOne
@PrimaryKeyJoinColumn
private D detail;
...
}
@Entity
@Table(name = "T_TEST_D")
@Access(AccessType.FIELD)
public class D implements Serializable {
@Id
@Column(name = "D_ID")
private String id;
@OneToOne
@PrimaryKeyJoinColumn
private M moreDetail;
...
}
這基本上是一個一對多使用3表格關係。使用Criteria API,我可以在一個SQL中使用fetch獲得A的第一級和所有一對一關係(級聯)和A的子級,即A => D => M,但是我可以'讓孩子B => D => M表現相同。
我最終得到A,D,M和B的SQL查詢,但隨後多個查詢得到B => D => M。
這裏是我做的:
final CriteriaBuilder cb = em.getCriteriaBuilder();
final CriteriaQuery<A> c = cb.createQuery(A.class);
final Root<A> a = c.from(A.class);
a.fetch(A_.details).fetch(D_.modeDetails);
a.fetch(A_.childrens);
...
是否有可能「複合型」的爲孩子們還呼籲?