我之间有@OneToMany
的关系
Hibernate中的Table1
和Table2
。
Table1
是所有者,关系是单向的 - 我没有映射
Table2
返回Table1
。
因此,作为其中的一部分,我定义了Collection
Table2
此@OneToMany
映射的实例。
而且我是级联的。
在这个"场景"中,我正在寻找添加的集合
Table2
个实例,例如table2_a
,table2_b
和table2_c
与Table1
对象相关,例如table1
。
有没有办法在保存所有者类实例table1
时执行此插入,
从而在级联中保存了依赖类实例table2_a
,table2_b
和table2_c
?
当我尝试这样做时,我收到错误
Duplicate entry '23' for key ...
Hibernate正在尝试保存所有table2_a
,table2_b
和table2_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);
}
注意:我在实体类中定义了所有内容。在映射文件中没有任何内容。
答案 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()
组成?