java - OneToOne 双向映射中的唯一约束

标签 java hibernate jpa hibernate-mapping one-to-one

关系所有者中的双向一对一映射是否需要 unique=true

@Entity
public class Customer {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    private String name;

    @OneToOne(cascade={CascadeType.PERSIST})
    @JoinColumn(name="passport_id", unique=true) //is unique=true required for bi-directional one-to-one mapping
    private Passport passport;

    public Passport getPassport() {
        return passport;
    }

}

@Entity
public class Passport {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @Column(name="passport_number")
    private String passportNumber;

    @OneToOne(mappedBy="passport")
    private Customer customer;

    public Customer getCustomer() {
        return customer;
    }

}

Hibernate 文档说数据库中的 FK 列应该被限制为唯一以模拟一对一的多重性,但它没有在双向映射中添加 unique=true

最佳答案

这是因为使用 Hibernate 自动 DDL 功能并不是强制的。您可以使用增量模式更新脚本,并且与模式相关的注释将毫无用处。坦率地说,我们有点将它们用于内存集成测试。

正如您所指出的,JoinColumn 应该声明唯一性约束。

关于java - OneToOne 双向映射中的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23869929/

相关文章:

hibernate - 具有复合主键的一对一双向映射

java - 如何让EhCache重置一个域与其他域之间的一对多关系的缓存?

java - JPA 当我应该关闭实体管理器时

java - 使用 Hibernate 保存对象

java - 在 Java 中使用 Comparator 时无法编译的源代码

java - 发现以元素 'jpa:repository' 开头的无效内容

java - Android 位图动画

hibernate - 在哪里设置 Tomcat 项目的 webservices url?

java - @SecondaryTable 注释不适用于不同架构中的相同表名

java - 在 strings.xml 中本地化字符串会产生 NullPointerException