Spring jpa在唯一属性上重复记录插入异常

Spring jpa在唯一属性上重复记录插入异常,jpa,spring-boot,Jpa,Spring Boot,第一次personService.addPerson(个人)在再次插入类似记录时可以正常工作,但会引发此异常: "com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'Patient' for key 'Role' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

第一次
personService.addPerson(个人)在再次插入类似记录时可以正常工作,但会引发此异常:

"com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'Patient' for key 'Role'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_112]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_112]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_112]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_112]"
我希望在数据库中根据电子邮件、
person
表中的角色(电子邮件)和
personrole
表中的角色(角色)保留唯一的行

--桌子是

CREATE TABLE PersonRole(Role_ID INT PRIMARY KEY AUTO_INCREMENT,Role VARCHAR(50) unique);

--个人实体

@Entity

public class Person implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(unique = true, nullable = false)
private int person_ID;

@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "Role_ID")
private Personrole personrole;
。。。。。。。。。。。。。 --角色实体

@实体

public class Personrole implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(unique = true, nullable = false)
private int role_ID;

@Column(length = 50)
private String role;

@OneToMany(mappedBy = "personrole",cascade = CascadeType.ALL)
private List<Person> persons;
---提前谢谢---

public class Personrole implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(unique = true, nullable = false)
private int role_ID;

@Column(length = 50)
private String role;

@OneToMany(mappedBy = "personrole",cascade = CascadeType.ALL)
private List<Person> persons;
public class UserController {

@RequestMapping(value = "/signup", method = RequestMethod.POST)
public String signUp(@Valid Person person, BindingResult result, ModelMap model) {

    if (result.hasErrors()) {
        model.addAttribute("message", result.getAllErrors() + "\n DOB is: " + person.getDob());
        return "fail";
    }

    Date date = new Date();
    person.setRegister_Date(date);

    personService.addPerson(person);