![](/img/trans.png)
[英]Hibernate JPA many-to-one self-join association cascade, how to select the top hierarchy and map children?
[英]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.