自包含实体不能引用实体列表

时间:2017-03-06 14:35:31

标签: java mysql eclipselink one-to-many self-reference

我试图模拟两个实体之间的一对多双向关系。 “one”侧的实体是自包含的,用于建模层次结构。每个层次结构应该在“很多”拥有的一侧有一组实体。

我已经成功地模拟了这种自我控制,但我无法让一对多的关系发挥作用。发生的事情是外键是空的。

这是实体:

层次

public class Hierarchy {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;

@OneToMany(mappedBy = "hierarchy", cascade = CascadeType.ALL)
private List<Folder> folders;

@Column(name = "paramName")
private String paramName;

@Column(name = "hierarchyType")
@Enumerated(EnumType.STRING)
private EHierarchyType hierarchyType;

@OneToOne
@JoinColumn(name = "parent_id")
private Hierarchy parent;

@OneToOne(mappedBy = "parent", cascade = CascadeType.ALL)
private Hierarchy child;

文件夹

public class Folder {

@Id
@GeneratedValue(strategy= GenerationType.SEQUENCE)
private long id;

@ManyToOne
@JoinColumn(name = "hierarchy_fk")
private Hierarchy hierarchy;

@Column(name = "name")
private String name;

@ElementCollection
@Column(name = "keywords")
@CollectionTable(name = "Folder_keywords")
private Set<String> keywords;

它在db中的样子:

Hierarchy table

enter image description here

所以你看到'Folder'表中的'hierarchy_fk'为空。

同样非常有趣的是,当我使用文件夹设置保持初始化层次结构并且我在持久化后立即执行查询时,它返回正确的层次结构,并且每个级别上设置了所有文件夹。但是当我尝试在其他测试方法中读取层次结构时,不会设置文件夹。

问题是为什么会发生这一切以及如何正确解决这个问题?

我在Mysql DB上使用Eclipselink 2.6.1。

0 个答案:

没有答案