1
我正在使用使用Hibernate 4作爲提供程序的JPA 2 CriteriaBuilder構建查詢。我一直在玩FetchModes,並得出結論認爲SELECT是我需要的。但SELECT力啓用FetchType.LAZY。我在某個地方讀到這個,似乎是這樣。FetchType EAGER與Root fetch()不一樣嗎?
在設備類此配置產生正確的結果:
@Fetch(value=FetchMode.SELECT)
@OneToMany(fetch=FetchType.EAGER, mappedBy = "device")
public List<DevInterfaces> getDevInterfaces() {
return this.devInterfaces;
}
但是我不想FetchType = EAGER硬編碼在我的實體。我希望在獲取時控制,我想我可以用一個取()這樣做:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Devices> dq = cb.createQuery(Devices.class);
Root<Devices> dev = dq.from(Devices.class);
dev.fetch(Devices_.devInterfaces)
但結果是內連接,我不希望出現這種情況。
如何在沒有硬編碼FetchType.EAGER的情況下使用FetchMode.SELECT獲取?