使用 unique = true 约束时 @Column() 注释的问题
Problems with @Column() annotation when I use the unique = true constraint
我正在 Spring 引导中进行基本用户注册,我使用了 @Column(unique = true)
注释,但它不起作用。我可以用同一个邮箱注册多个用户。
这是我的代码:
package io.agile.ppmtool.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import java.util.Collection;
import java.util.Date;
@Entity @Getter @Setter @NoArgsConstructor
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Email(message = "Username needs to be an email")
@NotBlank(message = "username is required")
@Column(unique = true)
private String username;
@NotBlank(message = "Please enter your full name")
private String fullName;
@NotBlank(message = "Password field is required")
private String password;
@Transient
private String confirmPassword;
private Date created_At;
private Date updated_At;
}
我希望有人能帮助我解释为什么这个注释对我不起作用。
unique
in @Column
仅在您让 JPA 提供程序为您创建数据库时使用 - 它将在指定列上创建唯一约束。
但是如果您已经拥有数据库,或者您在创建后更改了它,那么 unique
没有任何效果。
所以你需要数据库中的唯一约束,只有 @Column
并不能保证。
我正在 Spring 引导中进行基本用户注册,我使用了 @Column(unique = true)
注释,但它不起作用。我可以用同一个邮箱注册多个用户。
这是我的代码:
package io.agile.ppmtool.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import java.util.Collection;
import java.util.Date;
@Entity @Getter @Setter @NoArgsConstructor
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Email(message = "Username needs to be an email")
@NotBlank(message = "username is required")
@Column(unique = true)
private String username;
@NotBlank(message = "Please enter your full name")
private String fullName;
@NotBlank(message = "Password field is required")
private String password;
@Transient
private String confirmPassword;
private Date created_At;
private Date updated_At;
}
我希望有人能帮助我解释为什么这个注释对我不起作用。
unique
in @Column
仅在您让 JPA 提供程序为您创建数据库时使用 - 它将在指定列上创建唯一约束。
但是如果您已经拥有数据库,或者您在创建后更改了它,那么 unique
没有任何效果。
所以你需要数据库中的唯一约束,只有 @Column
并不能保证。