JPA - @Column(unique = true) - 具有"独特"属性的真正意义何在?

Gau*_*tel 29 java hibernate jpa

假设我有'主题'表

CREATE TABLE subject (id int PRIMARY KEY, name VARCHAR(255) **UNIQUE**)
Run Code Online (Sandbox Code Playgroud)

和关联的映射对象,

@Entity
@Table(name="subject")
public class SubjectDO {
    @Id
    @Column(name="id")
    int id;

    @Column(name="name", unique=true)
    String name;
    ...
    // Getter-Setter methods
}
Run Code Online (Sandbox Code Playgroud)

当我尝试保存具有重复'name'的对象时,有或没有'unique = true'定义,我得到类似的行为(相同的异常.)而且很明显JPA实现不能真正做任何事情,除非伸手到DB为检查.

它的真实用例是什么?

(我在这里假设,唯一约束也在数据库级别定义.)

Pre*_*ric 61

unique@Column仅当您让JPA提供程序为您创建数据库时才使用in - 它将在指定列上创建唯一约束.但是,如果您已经拥有数据库,或者您在创建数据库后对其进行了更改,那么unique就没有任何效果.

  • 我知道很久以前就有人问过这个问题,但是关于“unique”属性还有另一点需要考虑:单元测试。即使您的生产数据库不是由 JPA 创建的,如果您的单元测试针对 H2 等内存数据库运行,那么也值得使用此属性,因为它会考虑此属性。这样您就可以编写单元测试来验证该唯一约束。 (2认同)

Saj*_*ran 13

unique=true@Column注释将只在使用DDL generation,它没有在运行时产生任何影响.实际的唯一性检查发生在database.