如何在休眠中使用一对一/零映射

时间:2018-07-26 14:15:15

标签: java hibernate hibernate-mapping

假设我有两个表:Person和Vehicle

人员记录可以独立存在,也就是说,人员可以与车辆关联或不关联。但是没有人就不可能存在车辆记录。 简而言之,

车辆表的Person_Id具有外键,其中Person_Id是人员表的主键。

现在要在休眠状态下定义这种关系,我已经使用了如下的一对一映射:

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;

}

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

  

ConstraintVoilationException无法将null插入   Vehicle.Person_Id列。

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

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

2 个答案:

答案 0 :(得分:0)

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

如果您的数据库是手工创建的,则在数据库端允许为空。

发件人:javadocs

答案 1 :(得分:0)

请在车辆类别人员属性中添加此注释

@NotFound(action=NotFoundAction.IGNORE)