我有这两个实体叫做所有者和文件夹。 每个文件夹都属于所有者。 在文件夹中,我们可以有子文件夹,依此类推。
所有者实体
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "FOLDER_ID", nullable = false)
private Set<Folder> folders = new HashSet<>();
@Column(nullable = false)
private String name;
// Getters and setters
文件夹实体
@ManyToOne
@JoinColumn(name = "PARENT_FOLDER_ID")
private Folder parent;
@OneToMany(cascade = {CascadeType.ALL}, mappedBy = "parent")
private Set<Folder> children = new HashSet<>(); // recursive
@Column(nullable = false)
private String name;
// Getters and setter
名为Steve的所有者有一个名为mainFolder的文件夹,里面有一个subFolder。 当试图坚持所有者时,我遇到了backref问题。 我相信这是由于子文件夹不知道谁是它的拥有者。 问题是,因为subFolder在mainFolder中,而mainFolder属于Steve,这使得subFolder也属于Steve。 我可以将此JPA关系用于此问题吗?
public static void main(String[] args) {
Folder mainFolder = new Folder();
Folder subFolder = new Folder();
mainFolder.setName("Main Folder");
mainFolder.getChildren().add(subFolder);
subFolder.setName("SubFolder");
subFolder.setParent(mainFolder);
Owner owner = new Owner();
owner.setName("Steve");
owner.getFolders().add(mainFolder);
em.getTransaction().begin();
em.persist(owner); // backrefs error when trying to persist
em.getTransaction().commit();
}
异常日志
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: entity.Folder._foldersBackref
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290)
我正在使用Hibernate和H2。