首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JPA - @Column (unique=true) -拥有“唯一”属性的真正意义是什么?

JPA - @Column (unique=true) -拥有“唯一”属性的真正意义是什么?
EN

Stack Overflow用户
提问于 2015-05-26 21:54:00
回答 3查看 56.1K关注 0票数 46

假设我有一个“主题”表

代码语言:javascript
运行
复制
CREATE TABLE subject (id int PRIMARY KEY, name VARCHAR(255) **UNIQUE**)

以及相关联的映射对象,

代码语言:javascript
运行
复制
@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实现不能真正做任何事情。

它的真正用例是什么?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-26 21:57:14

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

票数 96
EN

Stack Overflow用户

发布于 2015-05-26 22:02:07

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

票数 18
EN

Stack Overflow用户

发布于 2020-12-08 16:27:08

有一种情况是,如果varchar字段太长,比方说使用utf8mb4编码的255长度,那么唯一的约束将不起作用,即使JPA使用unique-true重新创建表。尝试使用@Column(length=128,unique=ture)设置字段,然后重新创建表以进行验证。有关更准确的解释,请参阅this question中最上面的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30460596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档