我收到的错误:密钥“contact_info.UK_h27gqc2liegkl97kfca49dj09”的重复条目“xyz123@gmail.com”。
我正在使用 mysql, jpa, 弹簧靴
我想为不同的用户插入相同的联系人,但出现上述错误。 用户 1 与“xyzq23@gmail.com”有联系 如果用户 2 想要插入与“xyzq23@gmail.com”相同的联系人,那么我收到错误
用户
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
@Entity
@Table(name="User_info")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int userId;
@NotBlank(message = "Name field is required")
@Size(min = 3,max = 25,message = "Name length should be between 3 and 25 characters")
private String userName;
@Email(regexp ="^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$" ,message = "Invalid Email !")
private String userEmail;
@NotBlank(message = "Password field is required")
private String userPassword;
@Column(length = 500)
private String userDesc;
private String userRole;
private boolean userEnabled;
private String userImageUrl;
@OneToMany(cascade = CascadeType.ALL,mappedBy = "user",orphanRemoval = true)
private List<Contact> contacts=new ArrayList<>();
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public String getUserDesc() {
return userDesc;
}
public void setUserDesc(String userDesc) {
this.userDesc = userDesc;
}
public String getUserRole() {
return userRole;
}
public void setUserRole(String userRole) {
this.userRole = userRole;
}
public boolean isUserEnabled() {
return userEnabled;
}
public void setUserEnabled(boolean userEnabled) {
this.userEnabled = userEnabled;
}
public String getUserImageUrl() {
return userImageUrl;
}
public void setUserImageUrl(String userImageUrl) {
this.userImageUrl = userImageUrl;
}
public List<Contact> getContacts() {
return contacts;
}
public void setContacts(List<Contact> contacts) {
this.contacts = contacts;
}
@Override
public String toString() {
return "User [userId=" + userId + ", userName=" + userName + ", userEmail=" + userEmail + ", userPassword="
+ userPassword + ", userDesc=" + userDesc + ", userRole=" + userRole + ", userEnabled=" + userEnabled
+ ", userImageUrl=" + userImageUrl + ", contacts=" + contacts + "]";
}
}
联系方式
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnore;
@Entity
@Table(name = "Contact_info")
public class Contact {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int contactId;
private String contactName;
private String contactSecondname;
private String contactWork;
private String contactEmail;
private String contactImageUrl;
@Column(length = 2000)
private String contactDesc;
private String contactPhoneNo;
@ManyToOne
@JsonIgnore
private User user;
public int getContactId() {
return contactId;
}
public void setContactId(int contactId) {
this.contactId = contactId;
}
public String getContactName() {
return contactName;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public String getContactSecondname() {
return contactSecondname;
}
public void setContactSecondname(String contactSecondname) {
this.contactSecondname = contactSecondname;
}
public String getContactWork() {
return contactWork;
}
public void setContactWork(String contactWork) {
this.contactWork = contactWork;
}
public String getContactEmail() {
return contactEmail;
}
public void setContactEmail(String contactEmail) {
this.contactEmail = contactEmail;
}
public String getContactImageUrl() {
return contactImageUrl;
}
public void setContactImageUrl(String contactImageUrl) {
this.contactImageUrl = contactImageUrl;
}
public String getContactDesc() {
return contactDesc;
}
public void setContactDesc(String contactDesc) {
this.contactDesc = contactDesc;
}
public String getContactPhoneNo() {
return contactPhoneNo;
}
public void setContactPhoneNo(String contactPhoneNo) {
this.contactPhoneNo = contactPhoneNo;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public boolean equals(Object obj) {
return this.contactId==((Contact)obj).contactId;
}
}
控制器
// processing add contact form
@PostMapping("/process-contact")
public String processAddContact(@ModelAttribute Contact contact, @RequestParam("profileImage") MultipartFile file,
Principal principal, HttpSession sesson) {
try {
System.out.println(contact);
String userName = principal.getName();
User user = this.userService.fetchUserByUserName(userName);
System.out.println(user);
// processing uploading file
if (file.isEmpty()) {
System.out.println("Empty file");
contact.setContactImageUrl("contact.png");
} else {
contact.setContactImageUrl(file.getOriginalFilename());
File saveFile = new ClassPathResource("static/img").getFile();
Path path = Paths.get(saveFile.getAbsolutePath() + File.separator, file.getOriginalFilename());
Files.copy(file.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING);
System.out.println("file uploaded");
}
contact.setUser(user);
System.out.println("setUser");
user.getContacts().add(contact);
System.out.println("getContacts");
this.userService.saveUserData(user);
System.out.println("Added to Database");
// message success
sesson.setAttribute("message", new Message("Your Contact is Added ! Add new one !!", "success"));
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
e.printStackTrace();
//error message
sesson.setAttribute("message", new Message("Something went wrong ! try Again!!", "danger"));
}
return "normal/add_contact_form";
}