Hibernate的简单对象层次结构

时间:2015-03-10 01:25:42

标签: java hibernate jpa

如何进行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对象进行延迟映射?

2 个答案:

答案 0 :(得分:2)

目前还不清楚你在问什么。

然而,您似乎在谈论自引用关系而不是继承,因此您可以如下映射。默认提取策略应与任何其他@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;
}

答案 1 :(得分:1)

我相信你想问一下实体的继承。我建议使用JPA继承策略。有3个可用。

  1. Single Table:仅使用一个数据库表。列需要可以为空,因此浪费数据库空间
  2. Joined Strategy:使用多个表可以连接以插入和检索实体数据。保存数据库空间,但当继承层次结构变宽且深入时,性能会成为问题
  3. Table per concrete class:使用未连接的单独数据库表。
  4. 不同的策略有不同的优点和缺点。您可以根据需要选择。