播放JPA Hibernate特殊的自引用双向ManyToOne / OneToMany关系加入问题

时间:2011-08-30 22:23:49

标签: hibernate jpa playframework

我是Play Framework,Java和Hibernate JPA的新手,所以感谢任何帮助(来自PHP)。

我的目标是拥有一个类别树。它本质上是一个无限的父/子关系。

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

所以数据库中的Join / Relationship表如下所示:

| 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或类集。我可以通过一个函数实现所有这一切,但就像更正常的实体关系一样,这种信息很容易以这种方式检索。

对正确方向的任何想法,指导或捅都表示赞赏!

1 个答案:

答案 0 :(得分:2)

对于第一部分,在OO意义上你真正想要的是一个关联类。不幸的是,JPA不支持这些。请查看此链接:ManyToMany with additional columns这或多或少是您已有的。

对于问题的第二部分,只需使用自引用,双向关联:

public class Category extends Model {

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

    @ManyToMany
    public Set<Category> parentCats; 

}