停止加载子集合,如果我更新父集合

Posted

技术标签:

【中文标题】停止加载子集合,如果我更新父集合【英文标题】:Stop loading child collection, If I update parent 【发布时间】:2016-01-04 10:38:32 【问题描述】:

我不想在保存父实体时选择子集合

我有父子关系,子集合被映射为惰性。我取了一个父,当然因为懒加载子集合没有加载。但是当我想更新我的父母时,第一个子集合正在加载,然后父母正在更新。性能问题!怎么解决 ?

Parent entity :
@Entity
@Table(name = "LOAN")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Loan implements java.io.Serializable 

private Long id;
private Set<VchN> vchNs=new HashSet<VchN>(0);
private Set<VchN2> vchNs2=new HashSet<VchN2>(0);
.
.
.
.
private Set<VchN100> vchNs100=new HashSet<VchN100>(0);

/*
	id setter getter
*/
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "loan_id", insertable = false,updatable = false)
public Set<VchN> getVchNs() 
        return vchNs;


public void setVchNs(Set<VchN> vchNs) 
        this.vchNs = vchNs;


/*

setters getters

*/





Child enity:

@Entity
@Table(name = "VCH_N")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class VchN implements java.io.Serializable 

private Loan loan;
@Column(name = "loan_id", nullable = false)
public Long getLoanId() 
        return loanId;


public void setLoanId(Long loanId) 
        this.loanId = loanId;




so on......
Now when I execute
loanRepository.save(loan);

Output:
select columns from VchN where loan_id=?
select columns from VchN2 where loan_id=?
.
.
.
select columns from VchN100 where loan_id=?
update Loan set column = ?

I just want to update parent entity.

【问题讨论】:

你的代码在哪里!到目前为止你尝试了什么?请澄清您的具体问题或添加其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。请参阅How to Ask 页面以获得澄清此问题的帮助。 我已经更新了帖子。 【参考方案1】:

试着让你们的关系成为双向的。在您的 VchN 实体上,在 Loan 属性上指定 @ManyToOne 注释。删除 Loan 实体中每个 VchN 集合属性上的 @JoinColumn 注释。相反,将 @JoinColumn 注释放在 VchN 实体类的贷款属性上。使用 @OneToMany 注释的 mappedby 属性指定 Loan 实体是关系的反面。

示例如下:

public class Loan implements java.io.Serializable 
...
@OneToMany(fetch = FetchType.LAZY, mappedBy="loan")
public Set<VchN> getVchNs() 
        return vchNs;

...

public class VchN implements java.io.Serializable 
...
@ManyToOne
@JoinColumn(name = "loan_id")
public Loan getLoan() 
        return loan;

...

【讨论】:

实际上,你不必指定集合的​​获取类型为 Lazy,因为它们默认是惰性的。

以上是关于停止加载子集合,如果我更新父集合的主要内容,如果未能解决你的问题,请参考以下文章

Nhibernate 在子集合更新时未检测到父项的更改

Google Pub/Sub 更新 Firestore 子集合

Entity Framework 4.4,重新加载子集合对象

父容器的ajax重新加载后链接停止工作

归并排序

EF Core,投影子集合急切加载