Java JPA实体在访问实体类中的其他方法时加载惰性集合
我有一个父子实体(一方及其账户),代码如下所述。参与方与帐户及其帐户有一对多关系。我的问题是,当我加载PartyEntity并调用它的test方法时,那么为什么JPA(hibernate)会加载延迟加载的帐户。我没有访问测试方法中的帐户:Java JPA实体在访问实体类中的其他方法时加载惰性集合,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个父子实体(一方及其账户),代码如下所述。参与方与帐户及其帐户有一对多关系。我的问题是,当我加载PartyEntity并调用它的test方法时,那么为什么JPA(hibernate)会加载延迟加载的帐户。我没有访问测试方法中的帐户: @Entity @Table(name = "PARTY") public class PartyEntity { @Id @Column(name = "PARTY_ID") private String partyId;
@Entity
@Table(name = "PARTY")
public class PartyEntity {
@Id
@Column(name = "PARTY_ID")
private String partyId;
@OneToMany(mappedBy = "party", orphanRemoval = true)
private Set<PartyAccount> accounts = new HashSet<>();
public String getPartyId() {
return partyId;
}
public void setAccounts(Set<PartyAccount> partyAccounts) {
this.accounts = partyAccounts;
}
//**Call to this method executes query to fetch accounts**
public void test() {
System.out.println("test");
}
}
@实体
@表(名称=“一方”)
公共类派对实体{
@身份证
@列(name=“PARTY\u ID”)
私有字符串partyId;
@OneToMany(mappedBy=“party”,orphan=true)
私有集合帐户=新HashSet();
公共字符串getPartyId(){
返回partyId;
}
公共作废设置帐户(设置partyAccounts){
this.accounts=partyAccounts;
}
//**对该方法的调用执行查询以获取帐户**
公开无效测试(){
系统输出打印(“测试”);
}
}
当您声明为私人设置帐户时,它是否会更改代码>(即删除新HashSet()
)?为什么不查看日志?发布访问代码,当您输入该方法时在日志中放一行,当您退出该方法时在日志中放一行……您确定帐户正在加载吗?也显示PartAccount代码。@Alexalauyou这绝对是错误的答案,集合必须初始化。@Amalgovinus如果在事务边界中使用,则单位化集合是可以的--这正是PersistentSet
的目的,PersistentBag
implementations。当您声明为private Set帐户时,它是否会更改代码>(即删除新HashSet()
)?为什么不查看日志?发布访问代码,当您输入该方法时在日志中放一行,当您退出该方法时在日志中放一行……您确定帐户正在加载吗?也显示PartAccount代码。@Alexalauyou这绝对是错误的答案,集合必须初始化。@Amalgovinus如果在事务边界中使用,单元化集合是可以的——这正是PersistentSet
,PersistentBag
实现的目的。