【问题标题】:Play JPA Hibernate special self-referencing bidirectional ManyToOne/OneToMany relationship join question玩JPA Hibernate特殊自引用双向ManyToOne/OneToMany关系join问题
【发布时间】:2011-08-30 22:23:48
【问题描述】:

我是 Play 框架、Java 和 Hibernate JPA 的新手,非常感谢任何帮助(来自 PHP)。

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

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

所以我在数据库中的加入/关系表如下所示:

| 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 的属性,它们每个都是一个 List 或 Set 类别,该 Category 对象是其父级和子级。我当然可以通过一个函数来实现这一切,但就像更正常的实体关系如何以这种方式轻松检索这些信息一样。

感谢您对正确方向的任何想法、指导或启发!

【问题讨论】:

    标签: hibernate jpa playframework


    【解决方案1】:

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

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

    public class Category extends Model {
    
        @ManyToMany(mappedBy="parentCats")
        public Set<Category> subCats; 
    
        @ManyToMany
        public Set<Category> parentCats; 
    
    }
    

    【讨论】:

    • 谢谢。是的,我有自引用、双向关联,它完美地完成了这项工作。但是对于我有点拥有的关联类和这一点,我最终不会有两个数据库表以不同的方式存储相同的信息吗?所以我不确定你的建议是使用其中一个还是另一个?或者第一种方法是行不通的?或者我错过了什么。
    猜你喜欢
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多