使用 Hibernate 的简单对象层次结构
Simple object hierarchy with Hibernate
Hibernate如何做分层映射?
例如:
类别
id parent_id name
1 0 Root
2 1 Sub-root 1
3 1 Sub-root 2
4 2 Sub-(sub-root 1)
是否可以为这样的 Category
对象进行惰性映射?
我相信你想问的是实体的继承。我建议使用 JPA 继承策略。有 3 个可用。
- Single Table: 只使用一个数据库table。列必须可以为空,因此会浪费数据库 space
- Joined Strategy:使用多个table可以连接起来进行实体数据的插入和检索。保存数据库 space 但当继承层次变得又宽又深时性能成为问题
- Table per concrete class:使用未连接的单独数据库 table。
不同的策略有不同的优缺点。大家可以根据自己的需要选择。
你问的不是很清楚。
然而,您似乎在谈论自引用关系而不是继承,因此您可以如下所示进行映射。默认获取策略应该与任何其他 @OneToMany
即 LAZY.
相同
@Entity
public class Category{
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "parent_id")
private Category parent;
@OneToMany(mappedBy = "parent")
private Set<Category> subCategories;
}
Hibernate如何做分层映射?
例如: 类别
id parent_id name
1 0 Root
2 1 Sub-root 1
3 1 Sub-root 2
4 2 Sub-(sub-root 1)
是否可以为这样的 Category
对象进行惰性映射?
我相信你想问的是实体的继承。我建议使用 JPA 继承策略。有 3 个可用。
- Single Table: 只使用一个数据库table。列必须可以为空,因此会浪费数据库 space
- Joined Strategy:使用多个table可以连接起来进行实体数据的插入和检索。保存数据库 space 但当继承层次变得又宽又深时性能成为问题
- Table per concrete class:使用未连接的单独数据库 table。
不同的策略有不同的优缺点。大家可以根据自己的需要选择。
你问的不是很清楚。
然而,您似乎在谈论自引用关系而不是继承,因此您可以如下所示进行映射。默认获取策略应该与任何其他 @OneToMany
即 LAZY.
@Entity
public class Category{
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "parent_id")
private Category parent;
@OneToMany(mappedBy = "parent")
private Set<Category> subCategories;
}