【问题标题】:Hibernate -- cascading on @OneToMany休眠——在@OneToMany 上级联
【发布时间】:2014-04-09 00:12:59
【问题描述】:

我之间有@OneToMany 关系 Table1Table2 在休眠中。 Table1 是所有者,关系是单向的——我没有映射 Table2Table1

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

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

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

Duplicate entry '23' for key ...

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

有没有办法通过单向映射来进行这种插入 照原样 - 没有映射也 Table2Table1,在 @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);  
    }

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

【问题讨论】:

  • 发布您如何保存这些表格的示例代码

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


【解决方案1】:

您不需要添加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() 组成的吗?

【讨论】:

    猜你喜欢
    • 2019-12-24
    • 2022-12-03
    • 2010-12-31
    • 2021-12-11
    • 2015-07-07
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    相关资源
    最近更新 更多