Hibernate一对一映射表现为一对多

时间:2015-09-25 09:16:20

标签: java hibernate one-to-one

我在One to one mapping之间使用了Account and Company以下。公司表格有foreign key 'account_id'。以下是代码

@Entity
public class Company{
    ................
    @OneToOne
    @JoinColumn(name = "account_id")
    private Account account;
    ................
}

@Entity
public class Account{
    ................
    @OneToOne(mappedBy="account")
    private Company company;
    ...............
}

现在,上面的映射意味着,对于Account,只有一个company可以与之相关,反之亦然。

现在,帐户表行将从其他地方插入,保存公司需要更新一个帐户表列。现在,保存公司请求将包含公司详细信息和公司相关的帐户ID。在第一次请求时,公司数据将保存到具有帐户ID的公司表中,但在对特定account id的后续请求中,新行将插入公司表中,即使只应为特定{{{ 1}}。

我期待一些例外,只有一家公司可以与特定帐户相关联。我可以知道这个问题吗?

1 个答案:

答案 0 :(得分:2)

在保存具有给定帐户的新公司时,Hibernate不会检查其他公司是否还有其他帐户。即使它检查过你也没有任何保证,因为几个并发事务应该并行检查,然后并行插入。

防止这种情况发生的唯一方法是让数据库本身阻止它,如果你让Hibernate生成模式就会发生这种情况:account_id列的company列应该有唯一的约束。 1}}表。如果您自己生成架构,只需确保创建这样一个唯一约束。

一旦约束存在,尝试插入已与另一家公司关联的帐户的公司的事务将从数据库和回滚中获得异常。