我有與其他實體,如下面的Boat
實體OneToMany
關係的實體。實際上,該實體有多個字段。檢索,而不使用JPA的關係,一個實體沒有延遲加載
@Entity
public class Boat {
@Id
private long id;
private String name;
@OneToMany(fetch=FetchType.EAGER)
private List<Gun> guns;
public List<Gun> getGuns() {
return guns;
}
public String getName() {
return name;
}
}
對於某些搜索,我只是在Boat
的基本屬性感興趣,不想檢索任何OneToMany
關係。一種選擇是使所有OneToMany
與fetch=FetchType.LAZY
的關係。
然而,延遲加載造成兩個問題:
- 延遲加載周圍產生
OneToMany
關係,我並不需要一個代理。我並不需要在所有訪問OneToMany
關係,我需要每一個性能改進,我可以得到。 - 許多其他的查詢需要預先抓取,並改變所有
OneToMany
和ManyToOne
關係,延遲加載會使得其他查詢繁瑣。
有沒有辦法選擇哪些關係應該動態檢索,而不使用懶惰抓取。這可能使用標準的JPQL嗎?
我在Glassfish的使用的EclipseLink。
我以前調查的EclipseLink取出組,哪種類型的剷斷我的問題。然而,我碰到這個問題:https://stackoverflow.com/questions/19577864/classdescriptor-returns-null-fetchgroupmanager-when-trying-to-create-an-eclipsel
就我而言,惰性加載是默認加載,如果您使用的是ORM框架,則無法使用代理實現實體。這就意味着要完成像懶惰加載或只更新「如果需要」這樣的任務。我真的不認爲實體代理將會成爲你的性能瓶頸。 – Antoniossss
在許多查詢中,我不想解決關係,所以沒有代理就沒有物化。即使沒有間接性能問題,將所有關係設置爲「lazy」也會損害所有其他需要加載的查詢。另外,EclipseLink不支持'lazy'作爲Java SE中的一對一和多對一關係的獲取模式[lazy'將被忽略]。所以對這些關係使用懶惰只能在Java EE容器中工作。 – Kevin