好吧,我是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
。
这是正确的做法。可能是我没弄错。
答案 0 :(得分:1)
方案1:
如果会话中已经存在绑定ID,则需要从会话中获取持久对象,例如BondEntity bondEntity = session.get(BondEntity.class,1234);
现在您可以将此持久对象传递给groupEntity.setBondEntity(bondEntity);
方案2:
如果您需要保存新的债券编号并在组表中创建相应的条目。
创建一个BondEntity实例,设置必填字段,然后调用save或saveOrUpdate将该实体持久化在会话中,然后在group entity中设置该值,hibernate将根据两个表之间的关系处理其余的事务。 / p>
答案 1 :(得分:0)
这是不正确的
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name ="bond_id")
private BondEntity bondEntity;
也许你想用
@ManyToOne
@JoinColumn(name ="bond_id")
private BondEntity bondEntity;
请阅读本文
what is @JoinColumn and how it is used in Hibernate
这应该有效。也许你在错误的地方使用它
BondEntity bondEntity = new BondEntity();
bondEntity.setBondId(1234); //remaining field of bondEntity not set
groupEntity.setBondEntity(bondEntity);
您可以尝试使用session.load()
代替上述内容。