gpt4 book ai didi

JPA渴望加载FetchType.LAZY子集合

转载 作者:行者123 更新时间:2023-12-04 07:54:55 25 4
gpt4 key购买 nike

我看过几个类似的问题,有0个好的答案。

这应该非常简单。我正在使用Java JPA,并且有时但并非总是要加载子实体列表。不幸的是,当我说懒洋洋地取回JPA时,JPA似乎并没有在听我。我已经100%确定在我的代码中没有任何地方可以通过任何方式访问childEntities属性。但是,所有子实体仍在我的JPA.em()。find(..)调用后立即加载。这就是我声明带有注释的关系的方式。

@Entity
@Table(name = "parentEntities")
public class ParentEntity implements Serializable {
....
@OneToMany(mappedBy = "entityPropertyName", fetch = FetchType.LAZY)
public List<ChildEntity> childEntities;
...
}

这就是我加载父实体的方式:
ParentEntity parentEntity = JPA.em().find(ParentEntity.class, id);

另外,我希望有时渴望获取此集合,并能够动态告诉JPA何时执行此操作。不过,这是第2步。步骤1只是为了使此工作正常进行。

最佳答案

我是这样做的。请引用此内容,它也可以很好地工作:

@Entity
@Table(name = "member_information")
public class MemberInformation implements Serilizable{

@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE},optional = false)
private MemberInformationDetails memberInformationDetailsId;


@LazyCollection(LazyCollectionOption.TRUE)
@OneToMany(mappedBy = "memberInformationId", cascade = CascadeType.ALL)
private Collection<AccountOpening> accountOpeningCollection;


}

使用 @OneToOne(fetch = FetchType.LAZY....)进行一对一映射,使用 @LazyCollection(LazyCollectionOption.TRUE)进行收集。
@Entity
@Table(name = "member_info_details")
public class MemberInformationDetails implements Serializable{

@OneToOne(mappedBy = "memberInformationDetailsId")
private MemberInformation memberInformationId;

.......//getter and setters

}


@Entity
@Table(name = "account_opening")
public class AccountOpening implements Serializable {

@JoinColumn(name = "member_information_id", referencedColumnName = "id", nullable = false)
@ManyToOne(optional = false)
private MemberInformation memberInformationId;

..........//getters and setters

}

当您要访问集合时,请合并并获取对象:
@Stateless
public class MemberInformationFacade{
..............
public MemberInformation getMemberWithMemberDetails(MemberInformation m) {
m = getEntityManager().merge(m);
try {
m.getMemberInformationDetailsId().getId();


m.getMemberInformationDetailsId().accountOpeningCollection().size();

} catch (Exception e) {
e.printStackTrace();
}
return m;
}

}

关于JPA渴望加载FetchType.LAZY子集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17902980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com