假设我有一个“主题”表
CREATE TABLE subject (id int PRIMARY KEY, name VARCHAR(255) **UNIQUE**)
以及相关联的映射对象,
@Entity
@Table(name="subject")
public class SubjectDO {
@Id
@Column(name="id")
int id;
@Column(name="name", unique=true)
String name;
...
// Getter-Setter methods
}
当我尝试保存具有重复的'name‘的对象时,无论是否定义了'unique=true’,我都得到了类似的行为(相同的异常)。很明显,除非联系DB进行检查,否则JPA实现不能真正做任何事情。
它的真正用例是什么?
(我在这里假设,唯一约束也是在数据库级别定义的。)
发布于 2015-05-26 21:57:14
只有当您让@Column
提供者为您创建数据库时,才使用JPA中的JPA-它将在指定的列上创建唯一约束。但是,如果您已经有了数据库,或者在创建数据库后对其进行了更改,那么unique
就没有任何作用了。
发布于 2015-05-26 22:02:07
@Column
注释中的unique=true
将只在DDL generation
中使用,它在运行时不会有任何影响。实际的唯一性检查发生在database
中。
发布于 2020-12-08 16:27:08
有一种情况是,如果varchar字段太长,比方说使用utf8mb4编码的255长度,那么唯一的约束将不起作用,即使JPA使用unique-true重新创建表。尝试使用@Column(length=128,unique=ture)设置字段,然后重新创建表以进行验证。有关更准确的解释,请参阅this question中最上面的答案。
https://stackoverflow.com/questions/30460596
复制相似问题