如何在Hibernate

时间:2017-12-04 18:31:15

标签: java hibernate jpa

好吧,我是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

这是正确的做法。可能是我没弄错。

2 个答案:

答案 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()代替上述内容。