简体   繁体   English

休眠多对一自联接关联级联更新不起作用

[英]Hibernate many-to-one self-join association cascade update doesn't work

I have this self-join entity: 我有这个自我加入的实体:

@Entity
@Table(name = "PackageTemplate")
public class PackageTemplate implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(unique = true, nullable = false)
    private Long idPackageTemplate;

    private Byte status;

    // bi-directional many-to-one association to PackageTemplate
    @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
    @JoinColumn(name = "packageTemplate")
    private PackageTemplate packageTemplate;

    // bi-directional many-to-one association to PackageTemplate
    @OneToMany(mappedBy = "packageTemplate", cascade = { CascadeType.ALL })
    @JoinTable(name = "PackageTemplate", joinColumns = { @JoinColumn(name = "packageTemplate", nullable = true) }, inverseJoinColumns = { @JoinColumn(name = "idPackageTemplate", nullable = false) })
    private List<PackageTemplate> packageTemplateList;

     public PackageTemplate() {
    }

    public Long getIdPackageTemplate() {
        return this.idPackageTemplate;
    }

    public Byte getStatus() {
        return this.status;
    }

    public void setStatus(Byte status) {
        this.status = status;
    }

    public PackageTemplate getPackageTemplate() {
        return this.packageTemplate;
    }

    public void setPackageTemplate(PackageTemplate packageTemplate) {
        this.packageTemplate = packageTemplate;
    }

    public List<PackageTemplate> getPackageTemplateList() {
        return this.packageTemplateList;
    }

    public void setPackageTemplateList(List<PackageTemplate> packageTemplateList) {
        this.packageTemplateList = packageTemplateList;
    }
}

When I update a packageTemplate setting PackageTemplateList, it doesn´t work. 当我更新packageTemplate设置PackageTemplateList时,它不起作用。 The related items keep the relationship with father. 相关项目保持与父亲的关系。

No errors showed, just seems that cascade does nothing. 没有错误显示,似乎层叠不起作用。

Any idea? 任何想法?


Solved, JB Nizet was right. 解决后, JB Nizet是对的。 The problem was the "mappedBy in packageTemplateList". 问题是“ packageTemplateList中的mappedBy”。

The code should be something like this: 代码应该是这样的:

// bi-directional many-to-one association to PackageTemplate
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "packageTemplate")
private PackageTemplate packageTemplate;

// bi-directional many-to-one association to PackageTemplate
@OneToMany
@JoinColumn(name = "packageTemplate")
private List<PackageTemplate> packageTemplateList;

This code is working now. 该代码现在正在运行。

I suspect you are missing setting a back reference on the children to their parent. 我怀疑您没有在孩子身上给他们的父母回溯参考。

You can achieve this by the following code in the setPackageTemplateList method. 您可以通过setPackageTemplateList方法中的以下代码来实现此目的。

public void setPackageTemplateList(List<PackageTemplate> packageTemplateList) {

    for(PackageTemplate template : PackageTemplateList) {
        template.setPackageTemplate(this);
    }
    this.packageTemplateList = packageTemplateList;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM