我有一个奇怪的情况,我有两个与父母有关的子实体。一个实体添加和更新没有问题。另一个在添加后不会更新。代码似乎相同,但结果不同。
@Entity
public class Product {
@OneToMany(
mappedBy="parentProductF",
fetch=FetchType.LAZY,
cascade=CascadeType.ALL,
orphanRemoval=true)
private Set<FormulationLine> formulation;
public Set<FormulationLine> getFormulation(){
return formulation;
}
public void setFormulation(Set<FormulationLine> formulation) {
this.formulation = formulation;
}
@OneToMany(
mappedBy="parentProductT",
fetch=FetchType.LAZY,
cascade=CascadeType.ALL,
orphanRemoval=true)
private Set<Tonnage> tonnage;
public Set<Tonnage> getTonnage(){
return tonnage;
}
public void setTonnage(Set<Tonnage> tonnage) {
this.tonnage = tonnage;
}
}
子实体如下:
@Entity
public class FormulationLine {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PARENT_PRODUCT_ID", nullable = false)
private Product parentProductF;
}
@Entity
public class Tonnage extends BTDoc {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PRODUCT_ID", nullable = false)
private Product parentProductT;
}
创建子实体时,我按如下方式设置双向关系:
public void newTonnage(){
ton=new Tonnage();
ton.setParentProductT(thisDoc);
}
同样使用配方线:
public void newFormulationLine(){
formulationLine = new FormulationLine();
formulationLine.setParentProductF(thisDoc);
}
添加Tonnage或FormulationLine时使用以下代码:
public void addTonnage(Tonnage tonnage){
if(newTonnage){
thisDoc.getTonnage().add(ton);
}
return saveDoc(false);
}
public void addFormulationLine(FormulationLine fLine){
if(newFormulationLine){
thisDoc.getFormulationLine().add(fLine);
}
return saveDoc(false);
}
吨位实体更新没有问题。我可以让FormulationLine更新的唯一方法是将其从集合中删除然后重新添加它?
public void addFormulationLine(FormulationLine fLine){
thisDoc.getFormulationLine().remove(fLine);
thisDoc.getFormulationLine().add(fLine);
return saveDoc(false);
}
任何人都有任何想法可能导致这个或如何更好地调试它?我已经尝试将hibernate.show_sql设置为true并观察SQL查询,但他们只是缺少&#34;更新&#34;对于配方线 - 没有其他线索。
由于