JPA:如何为不同的父级在子项中插入重复条目

时间:2021-05-08 06:32:07

标签: spring-boot jpa

我收到的错误:密钥“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";
    }

0 个答案:

没有答案