2011-08-30 65 views
1

我是新来的Play Framework,Java和Hibernate JPA,所以非常感谢任何帮助(来自PHP)。玩JPA休眠特殊的自引用双向ManyToOne/OneToMany关系加入问题

我的目标是建立一个类别树。它本质上是无限的父母/子女关系。

每个类别关系都需要附加一些特定于该关系的注释,而不是构成该关系的各个类别。

所以在数据库中我加入/​​关系表看起来像:

| id | cat1id | cat2id | data1 | data2 | order | 
| 1 | 1  | 3  | stuff | more | 1  | 
| 2 | 1  | 4  | fish | fun | 2  | 
| 3 | 3  | 2  | ants | whoa | 1  | 

我试图在Category类做@ManyToMany,无法弄清楚如何获得额外的领域

我现在创建了一个具有所有类别内容的Category类,并且具有包含上述数据的CategoryTree类。 CaaegoryTree cat1id是@ManyToOne到Category和CategoryTree cat2id是@ManyToOne到Category和OneToMany都来自Category。这一切在大多数情况下都可以正常工作,但只是感觉不对。

另外,我想在Category类中有一个名为ParentCats和ChildCats的属性,它们分别是这个Category对象是父类和子类的一个List或Set类。我可以用一个函数来完成所有这些事情,但是像更普通的实体关系那样,这种信息很容易以这种方式检索出来。

任何想法,指导或戳在正确的方向感谢!

回答

2

对于第一部分,您在OO意义上实际需要的是关联类。不幸的是,这些不受JPA的支持。检查这个链接:ManyToMany with additional columns这是或多或少你已经有。

对于你的问题的第二部分,只要使用的自参考,双向关联关系:

public class Category extends Model { 

    @ManyToMany(mappedBy="parentCats") 
    public Set<Category> subCats; 

    @ManyToMany 
    public Set<Category> parentCats; 

} 
+0

感谢。是的,我有自我引用,双向关联,它完美地完成了这项工作。但有了关联类的东西,我有点和这一点,我不会结束与两个存储相同的信息不同的数据库表?所以我不确定你的建议是使用其中一个还是另一个?或者,第一种方法是行不通的?或者我错过了一些东西。 – bladmiral