0

私はこの自己結合エンティティを持っています:

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

このコードは現在機能しています。

4

1 に答える 1

0

子に親への後方参照を設定していないと思われます。

これは、setPackageTemplateList メソッドの次のコードで実現できます。

public void setPackageTemplateList(List<PackageTemplate> packageTemplateList) {

    for(PackageTemplate template : PackageTemplateList) {
        template.setPackageTemplate(this);
    }
    this.packageTemplateList = packageTemplateList;
}
于 2013-11-11T10:15:38.873 に答える