好吧,我是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将根据两个表之间的关系处理其余的事务。