java - 如何在 hibernate 中使用一对一/零映射

标签 java hibernate hibernate-mapping

假设我有两个表:人和车辆

人员记录可以独立存在,这意味着一个人可能与车辆关联,也可能不关联。但车辆记录不能脱离人而存在。 简而言之,

Vehicle 表的 Person_Id 有外键,其中 Person_Id 是 person 表的主键。

现在为了在 hibernate 中定义这种关系,我使用了一对一映射,如下所示:

public class Person

{

    private int person_id;

    @OnetoOne(mappedBy = "person", cascade = CascadeType.ALL)
    private Vehicle vehicle;
}

public class Vehicle {

    private int vehicle_id;

    @OnetoOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "person_id")
    private Person person;

}

现在,当我尝试保存拥有车辆的人员时,人员对象已成功保存。我只使用 session.save(person) 并且两个对象都成功保存。 另一方面,如果我尝试保存一个没有 Vehicle 的 Person,即该 Person 对象的 vechile 对象为 null。然后抛出异常,即

ConstraintVoilationException cannot insert null into the Vehicle.Person_Id column.

请帮助我理解,当我的车辆对象为空时,如何保存人员对象。

这似乎是 1 到 1/0 映射。

最佳答案

如果您的数据库架构是从注释生成的,请在 Person 的 OneToOne 映射中使用可选参数。

如果您的数据库是手动创建的,请在数据库端允许为 null。

来自:javadocs

关于java - 如何在 hibernate 中使用一对一/零映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51541022/

相关文章:

java - Hibernate多对多映射到同一实体单向

java - 字段必须是 secret 的,但子类必须使用该字段覆盖方法?

macos - 如何在 Mac OS X 上获取 JDK 1.5

java - 将两个不同大小的列表合并到一个 Map 中

java - validator 接收空对象,为什么?

java - 在 hibernate 中将多个集合映射到一个表中

java - 如何在一个类中同步多线程应用程序,而不需要工作线程和 Controller ?

java - Spring Hibernate 未将实体映射到 PostGres 中的现有表

hibernate - 尝试设置 Tomcat 和 JDBC 连接池 : Communications Link Failure

Hibernate - 如何禁用列的映射