【发布时间】:2019-02-26 13:51:55
【问题描述】:
我的 POJO 正在使用 JPA,当我在列中应用唯一值对我不起作用时,我尝试使用 UniqueConstraint,但对我也不起作用。
下面是我的代码
@Entity
@Table(name = "users", uniqueConstraints={@UniqueConstraint(columnNames = {"user_id"}),@UniqueConstraint(columnNames = {"username"}),@UniqueConstraint(columnNames = {"email"})})
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="user_id",unique=true,nullable = false)
private int UserId;
@Column(name = "username" ,unique=true,nullable = false)
private String Username;
@Column(name = "email",unique=true ,nullable = false)
private String email;
@Column(name = "firstname",nullable = false)
private String firstname;
@Column(name = "lastname", nullable = false)
private String lastname;
@Column(name = "password", nullable = false)
private String password;
@Column(name = "active")
private int active;
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="user_role", joinColumns=@JoinColumn(name="user_id"), inverseJoinColumns=@JoinColumn(name="role_id"))
private Set<Role> roles;
下面是数据库中生成的表(MySQL)
| users | CREATE TABLE users (
user_id int(11) NOT NULL,
username varchar(255) NOT NULL,
active int(11) DEFAULT NULL,
email varchar(255) NOT NULL,
firstname varchar(255) NOT NULL,
lastname varchar(255) NOT NULL,
password varchar(255) NOT NULL,
PRIMARY KEY (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
spring 启动后的休眠日志
Hibernate: create table users (user_id integer not null, username varchar(255) not null, active integer, email varchar(255) not null, firstname varchar(255) not null, lastname varchar(255) not null, password varchar(255) not null, primary key (user_id)) engine=InnoDB
Hibernate: alter table users drop index UKfnranlqhubvw04boopn028e6
Hibernate: alter table users add constraint UKfnranlqhubvw04boopn028e6 unique (username, email)
Hibernate: alter table users drop index UK_r43af9ap4edm43mmtq01oddj6
Hibernate: alter table users add constraint UK_r43af9ap4edm43mmtq01oddj6 unique (username)
Hibernate: alter table users drop index UK_6dotkott2kjsp8vw4d0m25fb7
【问题讨论】:
-
在运行应用程序之前表是否存在?
unique属性仅在表不存在且由应用程序创建时才有效。 -
@S.K.不,它是新数据库 ...JPA 将创建一切
-
@OsamaAl-Banna 您在 db 中创建的表是否包含唯一索引约束?
-
@OsamaAl-Banna 澄清一下,你是如何检查唯一约束是否添加到表中的?
-
我的数据库是新鲜的,没有任何表存在于表元数据中。
标签: java mysql sql hibernate jpa