我使用Hibernate 4.1.10.Final作爲我的JPA提供者,Spring和Spring MVC。有兩個實體:find(Class,id)和JPQL獲取不同的對象(JPA)
@Entity
@Table(name = "a")
public class A {
@Id
private String id;
@OneToMany(mappedBy = "a", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<B> bs;
}
@Entity
@Table(name = "b")
public class B {
@Id
private String id;
@ManyToOne
@JoinColumn(name = "fk_a_id")
private A a;
}
我需要得到一個A
和它的b
S,所以我用的EntityManager的find(A.class,id)
。
A a1 = em.find(A.class, id);
a1.getBs().size();
的量,結果爲:的b
S上的大小爲零(這意味着沒有相關聯的B)。 但我確信數據庫中有許多關聯的Bs,並且實際上可以在通過控制檯檢查時從數據庫加載數據。
當我使用查詢:
Query query = em.createQuery("SELECT a FROM A AS a WHERE a.id = ?1",A.class);
query.setParameter(1, id);
A a= (A) query.getSingleResult();
a.getBs().size(); // = 22
我,而不是得到一個大小= 22
有什麼不對?
設定休眠* show_sql *屬性,看什麼也是有差別的在執行SQL查詢。 – 2013-02-27 03:07:30
我已經比較了兩個執行的sqls,而使用Query的sqls只是一個select子句並解決了關聯,但find()有一些步驟可以做到這一點。首先,它加載A然後加載關聯的實體。但是bs沒有與A關聯。 – 2013-02-27 06:04:30