El *_*apo 8 hibernate one-to-many many-to-one
我有两个实体:
@Entity
public class File
.......
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@OneToMany(fetch=FetchType.LAZY, mappedBy="file", cascade=CascadeType.ALL)
private List<Tag> tags;
.......
OTHER PROPERTIES
.......
@Entity
public class Tag
.......
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@ManyToOne
@JoinColumn(name="file_id")
private File file;
@Column
private String tag;
.......
OTHER PROPERTIES
.......
Run Code Online (Sandbox Code Playgroud)
我试图通过执行以下操作插入到File(以及随后的Tag)中:
File file = new File();
Tag tag = new Tag();
tag.setTag("tag1");
Tag2 tag2 = new Tag();
tag2.setTag("tag2");
List<Tag> tags = new ArrayList<Tag>();
tags.add(tag);
tags.add(tag2);
file.setTags(tags);
---Add other file attributes here---
Run Code Online (Sandbox Code Playgroud)
然后我使用以下命令在我的DAO中插入文件:
sessionFactory.getCurrentSession().saveOrUpdate(file);
Run Code Online (Sandbox Code Playgroud)
在我的日志中,我看到插入到我的"文件"表中,并且在我的标记表中插入了2个,但是,我的标记表中指向我的文件表(file_id)的外键是NULL.
我怎么可能做错了?
jpk*_*ing 14
您没有为标记设置文件,只将标记设置为文件.请记住,在OOP中,与关系模型相反,您必须设置关系的两端.您只能因为向文件添加了一组标记而无法从标记导航到文件.在您的情况下,您可以从文件导航到标记(即:列出文件的所有标记).通过仅查看标签,您无法分辨标签所属的文件.
通常做的是其中一个模型中的辅助方法,如下所示:
public void addTag(Tag tag) {
this.tags.add(tag);
tag.setFile(this);
}
Run Code Online (Sandbox Code Playgroud)
请参阅此示例(来自Hibernate的测试套件):
| 归档时间: |
|
| 查看次数: |
15832 次 |
| 最近记录: |