繁体   English   中英

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

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

我有这个自我加入的实体:

@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;
    }
}

当我更新packageTemplate设置PackageTemplateList时,它不起作用。 相关项目保持与父亲的关系。

没有错误显示,似乎层叠不起作用。

任何想法?


解决后, JB Nizet是对的。 问题是“ packageTemplateList中的mappedBy”。

代码应该是这样的:

// 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;

该代码现在正在运行。

我怀疑您没有在孩子身上给他们的父母回溯参考。

您可以通过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