好吧,我是Hibernate的新手,我遇到的问题很琐碎。我没有找到解释它的答案,但可能是我没有完全理解它,但我仍然被卡住。

我发现要映射外键,我需要映射一个实体,如下所示

// this is GroupEntity
// mapping bond_id from Bond table
   @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name ="bond_id")
    private BondEntity bondEntity;


我相信这会将BondEntity的表的bond_id列映射到当前表的bond_id。

现在,如何在持久化此表的实体的同时将此bond_id设置为DB。与其他列不同,该字段现在带有一个对象。

我尝试仅设置bond_id

BondEntity bondEntity = new BondEntity();
bondEntity.setBondId(1234); //remaining field of bondEntity not set
groupEntity.setBondEntity(bondEntity);


如果我继续尝试保留该实体,则会得到detached entity passed to persist in hibernate

正确的做法是什么?可能是我没有正确获得它。

最佳答案

方案1:

如果会话中已经存在绑定ID,则需要从会话中获取持久对象,例如BondEntity bondEntity = session.get(BondEntity.class,1234);。

现在,您可以将此持久对象传递给groupEntity.setBondEntity(bondEntity);。

方案2:

如果您需要保存新的债券编号并在组表中创建相应的条目。

创建一个BondEntity实例,设置必填字段,然后调用save或saveOrUpdate将该实体持久化在会话中,然后在group entity中设置该值,hibernate将根据两个表之间的关系处理其余的事务。

07-27 13:33