Hibernate - 在@OneToMany上级联

时间:2014-04-09 00:12:59

标签: hibernate mapping hibernate-onetomany object-relational-model

我之间有@OneToMany的关系 Hibernate中的Table1Table2Table1是所有者,关系是单向的 - 我没有映射 Table2返回Table1

因此,作为其中的一部分,我定义了Collection Table2@OneToMany映射的实例。 而且我是级联的。

在这个"场景"中,我正在寻找添加的集合 Table2个实例,例如table2_atable2_btable2_cTable1对象相关,例如table1

有没有办法在保存所有者类实例table1时执行此插入, 从而在级联中保存了依赖类实例table2_atable2_btable2_c? 当我尝试这样做时,我收到错误

Duplicate entry '23' for key ...

Hibernate正在尝试保存所有table2_atable2_btable2_c 在为会话中相应的Table2实例生成的相同Table1密钥值上。 那么,我如何使用"很多" @OneToMany这边的一边?

有没有办法使用单向映射进行此插入 原样 - 在Table2上没有映射Table1@ManyToOne,对于关系的另一面? 我希望保持桌子清淡。

代码正在处理在集合中插入单个Table2实例,其他一切都很好。

// ===========================

编辑:代码的相关部分:

Table1中定义的关系 - 实体类:

@OneToMany(cascade = CascadeType.ALL)
private Collection<Table2> table2Inst = new ArrayList<>();
// getter & setter

在pojo中执行保存的代码:

    table1 = (Table1)session.get(Table1.class, theId);

    if ( table1!=null ) {
        table1.getTable2Inst().addAll(contactsList);
        session.saveOrUpdate(table1);  
    }

注意:我在实体类中定义了所有内容。在映射文件中没有任何内容。

1 个答案:

答案 0 :(得分:0)

您是否需要添加mappedBy = "table1Id"或其中一个到多个?像这样。

@OneToMany(cascade = CascadeType.ALL, mappedBy = "table1Id");//table1Id is foreign key of table1 in table2
private Collection<Table2> table2Inst = new ArrayList<>();

您是否确保contactsList由所有新对象new table2()组成?