我使用 Hibernate 4.1.10.Final 作为我的 JPA 提供程序 Spring 和 Spring MVC。有两个实体:
@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,所以我使用find(A.class,id)
EntityManager。
A a1 = em.find(A.class, id);
a1.getBs().size();
结果是:b
s的大小为零(这意味着没有关联的B)。但我确信数据库中有很多关联的 B,并且确实可以在通过控制台检查时从数据库中加载数据。
当我使用查询时:
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
相反,我得到一个 size = 22。
怎么了?