JPA子实体不会更新,除非删除然后重新添加

时间:2018-06-14 11:58:35

标签: jpa wildfly-10

我有一个奇怪的情况,我有两个与父母有关的子实体。一个实体添加和更新没有问题。另一个在添加后不会更新。代码似乎相同,但结果不同。

@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;对于配方线 - 没有其他线索。

由于

0 个答案:

没有答案