2012-03-19 57 views
-2

我有几个类别。每个类别可以存储一个子类别。例如:树结构和Java持久性2.0

1)乐器

一个)吉他

  • 电吉他

  • 声学吉他

b)中钢琴

2)办公用品

  • 统治者

  • 铅笔

我想查看树形式的上述数据,我想控制的项目位置。我使用JPA 2.0,我不知道如何以最佳方式坚持数据。我可以用自己的方式解决问题,但我不想重新发明轮子。所以,我正在寻找更好的解决方案 - 一个图书馆等。我应该使用什么?

回答

3

这是一个经典问题。

解决方案很大程度上取决于你想要用你的树做什么。

正常的解决方案是直接表示父子关系。您的类看起来有点像:

@Entity 
public class Category { 
    @ManyToOne 
    private Category parent; 

    @OneToMany(mappedBy="parent") 
    private Set<Category> children; 
} 

而且你必须在保持了parent值表中的单个列。

这种方法很容易理解和实现,并且使得在树上的导航非常容易。然而,回答诸如“家居饰品”下的所有类别都是什么类型的问题是相当昂贵的?“或“是'lilos'的'花园用品'的任何深度的子类别?”。

如果你不介意做一些本地SQL,并且你的数据库支持递归公用表表达式,那么你可以很容易地做这些查询。

如果不是,请查阅nested sets