我有这个自我加入的实体:
@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;
此代码现在正在运作。
答案 0 :(得分:0)
我怀疑你错过了将孩子的背部参考设置给他们的父母。
您可以通过setPackageTemplateList方法中的以下代码实现此目的。
public void setPackageTemplateList(List<PackageTemplate> packageTemplateList) {
for(PackageTemplate template : PackageTemplateList) {
template.setPackageTemplate(this);
}
this.packageTemplateList = packageTemplateList;
}