1

我在 Hibernate 之间有@OneToMany关系 。是所有者,并且关系是单向的——我没有映射 回.Table1Table2Table1Table2Table1

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

在这个“场景”中,我希望添加一个 Table2实例集合,比如table2_atable2_btable2_c 与一个Table1对象相关,比如table1

有没有办法在保存所有者类实例时进行这种插入table1,从而拥有依赖类实例table2_atable2_btable2_c保存在级联上?当我尝试这样做时,我收到一个错误

Duplicate entry '23' for key ...

Hibernate 正在尝试将所有table2_a,table2_b和保存在为会话中的相应实例生成table2_c 的相同Table2键值上。Table1那么,我如何使用@OneToMany这里的“许多”方面?

有没有办法按原样使用单向映射进行这种插入 - 没有映射Table2Table1, on @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);  
    }

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

4

1 回答 1

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()吗?

于 2014-04-09T00:48:29.587 回答