与另一个组合实体的递归JPA实体关系

时间:2013-06-30 16:06:34

标签: jpa-2.0

我有这两个实体叫做所有者和文件夹。 每个文件夹都属于所有者。 在文件夹中,我们可以有子文件夹,依此类推。

所有者实体

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

0 个答案:

没有答案