JPA实体类中对应数据库唯一约束的字段注解是什么?
JPA实体类映射数据库唯一约束的注解方案
针对你的需求,有两种常用的JPA注解方式来映射数据库的唯一约束:
方式一:直接在@Column注解中配置
这是最简单的单列唯一约束映射方式,直接给目标属性的@Column注解添加unique = true参数即可:
package com.fnptechnologies.logic.resto; import java.io.Serializable; import jakarta.persistence.Basic; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; import lombok.Data; @Entity @Data @Table(name = "t_pos_calendrier_serveur") public class TPosCalendrierServeur implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") private Integer id; // 直接在@Column中设置unique=true来映射唯一约束 @Column(name = "mmc_user_id", unique = true) @NotNull private int mmcUserId; }
方式二:通过@Table注解的uniqueConstraints定义
如果需要给唯一约束指定自定义名称,或者要配置多列联合唯一约束,可以使用@Table注解的uniqueConstraints属性:
@Entity @Data // 通过@Table的uniqueConstraints定义带名称的唯一约束 @Table(name = "t_pos_calendrier_serveur", uniqueConstraints = { @UniqueConstraint(columnNames = "mmc_user_id", name = "uk_t_pos_calendrier_serveur_mmc_user_id") }) public class TPosCalendrierServeur implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") private Integer id; @Column(name = "mmc_user_id") @NotNull private int mmcUserId; }
注意事项
- 第一种方式适合快速配置单列唯一,约束名称会由JPA自动生成,不同实现生成的名称格式可能不同;
- 第二种方式更灵活,能自定义约束名方便后续数据库维护,也支持多列联合唯一(只需把
columnNames改成数组形式,比如{"col1", "col2"})。
内容的提问来源于stack exchange,提问作者pheromix
相关产品推荐
相关产品推荐

