当前位置:  开发笔记 > 编程语言 > 正文

如何在JPA中拥有2个相同类型的集合?

如何解决《如何在JPA中拥有2个相同类型的集合?》经验,为你挑选了1个好方法。

我在JPA中有两个实体:Entry和Comment.Entry包含两个Comment对象集合.

@Entity
public class Entry {
    ...

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @IndexColumn(base = 1, name = "dnr")
    private List descriptionComments = new ArrayList();

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @IndexColumn(base = 1, name = "pmnr")
    private List postMortemComments = new ArrayList();

    ...
}

为了存储这样的对象,JPA + Hibernate创建了"Entry"表,"Comment"表和SINGLE"Entry_Comment":

create table Entry_Comment (Entry_id integer not null, postMortemComments_id integer not null, pmnr integer not null, descriptionComments_id integer not null, dnr integer not null, primary key (Entry_id, dnr), unique (descriptionComments_id), unique (postMortemComments_id))

对象的存储失败,descriptionComments_id并且postMortemComments_id不能同时"不为空".

如何使用JPA + Hibernate存储包含两个相同类型集合的对象?



1> Idolon..:

这是许多Hibernate错误之一(准确地说是HHH-3410).

我已经设法通过向关系添加@JoinTable注释来修复它@OneToMany,每个关系都有自己的表名.

在你的情况下,它看起来像这样:

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name="entity_descriptioncomments")
@IndexColumn(base = 1, name = "dnr")
private List descriptionComments = new ArrayList();

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name="entity_postmortemcomments")
@IndexColumn(base = 1, name = "pmnr")
private List postMortemComments = new ArrayList();

注意:您还必须添加@IndexColumn注释(因为多个EAGER包的其他Hibernate问题:HHH-1718/EJB-346).

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有