我有一个实体与其他实体有OneToMany
个关系,例如下面的Boat
实体。实际上,该实体有许多字段。
@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 fetch groups,这有点解决了我的问题。但是,我遇到了这个问题:https://stackoverflow.com/questions/19577864/classdescriptor-returns-null-fetchgroupmanager-when-trying-to-create-an-eclipsel
答案 0 :(得分:1)
如果您想要的只是名称或其他基本属性,请不要返回船只实体。如果你正在追求的话,JPA允许返回原始数据而不是你的manged实体。在一个并不总是需要的关系上使用lazy会加快速度,而不是减慢速度,但是当需要序列化并且需要关系时,它确实需要进行规划。 Eclipselink还根据需要提供部分加载实体的提取和属性组。有关详细信息,请参阅http://wiki.eclipse.org/EclipseLink/Examples/JPA/AttributeGroup