我已经通过JPA使用Hibernate建立了一个项目 - 即我正在定义一个持久性单元并通过EntityManager(例如使用EntityManager' s find()
方法)。
我有这样的注释实体A和B:
@Entity
class A
{
@Id
@Column
private Integer id;
@ManyToOne(fetch=FetchType.EAGER, optional = false)
@Fetch(FetchMode.JOIN)
@JoinColumn(name="b_id")
private B bInstance;
...
}
@Entity
class B
{
@Id
@Column(name = "b_id")
private Integer id;
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "bInstance")
private Set<A> As = new HashSet<A>();
}
现在当我调用findById(Integer id)
来获取A元素时,我仍然得到两个选择查询,而不是一个内部连接到B表的单个查询。
我知道@Fetch
是一个Hibernate注释,因此我失去了JPA的标准,但它不应该正常工作吗?
为了记录,这是我的Gneric Dao中的findById
方法:
public E findById(Class<E> persistentClass, ID primaryKey) {
validateFindById(persistentClass, primaryKey);
disableFilter(persistentClass);
return (E) getEntityManager().find(persistentClass, primaryKey);
}