我使用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