我在单表中有父/子关系,让我们说就像这样简单
id | parent_id | some_data
Run Code Online (Sandbox Code Playgroud)
我试图理解/实现如何为单表关系构建Hibernate类的最佳实践.
我有一个来自某个地方的源,它有嵌套的JSON结构,因此在解析之后我想在OracleDB中使用它.
饲料看起来像
{
1:
=> 2:
=> 3
=> 4:
=> 5
=> 6
}
Run Code Online (Sandbox Code Playgroud)
这些数据最终应该在db中:
1 | 0 (main rec, no parent)
2 | 1
3 | 2
4 | 2
5 | 4
6 | 1
Run Code Online (Sandbox Code Playgroud)
它可以越走越深......
我想遍历JSON结构并构建最终保存在db中的类
session.save(parent)
Run Code Online (Sandbox Code Playgroud)
parent将是我的hibernate映射类的实例,让我们将其命名为Feed.
每次我下降树时,它都会创建一个新的Feed,找到它的父级并将其添加到列表中.
Feed **parent** = new Feed();
-> Feed child2 = new Feed();
child2.setParent(parent)
parent.add(child2);
-> Feed child3 = new Feed();
child3.setParent(child2)
child2.add(child3);
Feed child4 = new Feed();
child4.setParent(child2)
child2.add(child4);
.............
session.save(**parent**)
Run Code Online (Sandbox Code Playgroud)
我的问题是我可以使用@ManyToOne和@OneToMany方法吗?
我也看了@Inheritance(strategy = InheritanceType.SINGLE_TABLE),但我不认为我可以将它应用于我的问题,因为我不认识父母,他们是动态的.我无法构建父类并扩展它.
所以底线我试图解决两个问题
轻松保存在父级别
如何在需要时从父级到叶子获取数据
一些Hibernate Mapped Classes示例将非常受欢迎.
ant*_*oho 13
好像我需要做的就是:
@Entity
@Table(name = "table_name")
public class TableName{
......
@Transient
private Long parentId;
......
@ManyToOne(fetch = FetchType.LAZY, optional=true)
@JoinColumn(name="parent_id")
private TableName parent;
@OneToMany(mappedBy="parent", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval=true)
private Set<TableName> children = new HashSet<TableName>();
Run Code Online (Sandbox Code Playgroud)
不仅仅是
TableName papa = new TableName();
papa.setParent(null); // parent
TableName kid1 = new TableName();
kid1.setParent(papa);
papa.getChildren().add(kid1);
TableName kid1_1 = new TableName();
kid1_1.setParent(kid1);
kid1.getChildren().add(kid1_1);
TableName kid2 = new TableName();
kid2.setParent(papa);
papa.getChildren().add(kid2);
session.save(papa)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9666 次 |
| 最近记录: |