Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java持久性:无法添加或更新子行:外键约束失败_Java_Mysql_Jpa - Fatal编程技术网

Java持久性:无法添加或更新子行:外键约束失败

Java持久性:无法添加或更新子行:外键约束失败,java,mysql,jpa,Java,Mysql,Jpa,基本上,我正在实现一个PDS(个人数据表),所以我有一些表,比如客户(员工)、个人信息、其他信息 客户端表结构: idClients, name, institute, username, password, usertype idPersonalInfo, agencyno, bloodtype, status, citizenship, address, idClients Personalinfo表结构: idClients, name, institute, username, pa

基本上,我正在实现一个PDS(个人数据表),所以我有一些表,比如客户(员工)、个人信息、其他信息

客户端表结构:

idClients, name, institute, username, password, usertype
idPersonalInfo, agencyno, bloodtype, status, citizenship, address, idClients
Personalinfo表结构:

idClients, name, institute, username, password, usertype
idPersonalInfo, agencyno, bloodtype, status, citizenship, address, idClients
我可以成功添加客户端,但当我尝试添加/更新personalinfo时,我会

MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails
在personalinfo类中,我还有一行:

 @JoinColumn(name = "idClients", referencedColumnName = "idClients", insertable = false, updatable = false)
在客户类别I中,还包括:

 @OneToOne(cascade = CascadeType.ALL, mappedBy = "clients")    
    private Personalinfo personalinfo;
但我不明白为什么我会违反约束

Error Code: 1452
Call: INSERT INTO personalinfo (...) VALUES (...)
    bind => [7parameters bound]
Query: InsertObjectQuery(com.profiling.database.Personalinfo[ idPersonalInfo=null ])
编辑:

编辑 客户端类:

@Entity
@Table(name = "clients")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Clients.findAll", query = "SELECT c FROM Clients c"),
    @NamedQuery(name = "Clients.findByIdClients", query = "SELECT c FROM Clients c WHERE c.idClients = :idClients"),
    @NamedQuery(name = "Clients.findByFirstName", query = "SELECT c FROM Clients c WHERE c.firstName = :firstName"),
    @NamedQuery(name = "Clients.findByGender", query = "SELECT c FROM Clients c WHERE c.gender = :gender"),
    @NamedQuery(name = "Clients.findByLastName", query = "SELECT c FROM Clients c WHERE c.lastName = :lastName"),
    @NamedQuery(name = "Clients.findByMiddlename", query = "SELECT c FROM Clients c WHERE c.middlename = :middlename"),
    @NamedQuery(name = "Clients.findByNameExtension", query = "SELECT c FROM Clients c WHERE c.nameExtension = :nameExtension")})
public class Clients implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idClients")
    private Integer idClients;
    @Column(name = "FirstName")
    private String firstName;
    @Column(name = "Gender")
    private String gender;
    @Column(name = "LastName")
    private String lastName;
    @Column(name = "Middlename")
    private String middlename;
    @Column(name = "NameExtension")
    private String nameExtension;
    @Column(name = "Institute")
    private String institute;

    //value added
    @Column(name = "username")
    private String username;
    @Column(name = "password")
    private String password;
    @Column(name = "userType")
    private String userType;


    @OneToMany(mappedBy = "idClients")
    private List<Workexpe> workexpeList;

    @OneToMany(mappedBy = "idClients")
    private List<Ratingscore> ratingscoreList;

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "clients")
    private Familyback familyback;

    @OneToMany(mappedBy = "idClients")
    private List<Civilservice> civilserviceList;

    @OneToMany(mappedBy = "idClients")
    private List<Staffscore> staffscoreList;

    @OneToMany(mappedBy = "idClients")
    private List<Referenceinfo> referenceinfoList;

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "clients")    
    private Personalinfo personalinfo;

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "clients")
//    @OneToOne(mappedBy = "idClients")
    private Otherinfo otherinfo;

    @OneToMany(mappedBy = "idClients")
    private List<Trainingprog> trainingprogList;
    @OneToMany(mappedBy = "idClients")
    private List<Children> childrenList;
    @OneToMany(mappedBy = "idClients")
    private List<Specialskills> specialskillsList;
    @OneToMany(mappedBy = "idClients")
    private List<Educback> educbackList;
    @OneToMany(mappedBy = "idClients")
    private List<Voluntarywork> voluntaryworkList;

    public Clients() {
    }

    public Clients(Integer idClients) {
        this.idClients = idClients;
    }

    public Integer getIdClients() {
        return idClients;
    }

    public void setIdClients(Integer idClients) {
        this.idClients = idClients;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getMiddlename() {
        return middlename;
    }

    public void setMiddlename(String middlename) {
        this.middlename = middlename;
    }

    public String getNameExtension() {
        return nameExtension;
    }

    public void setNameExtension(String nameExtension) {
        this.nameExtension = nameExtension;
    }

    @XmlTransient
    public List<Workexpe> getWorkexpeList() {
        return workexpeList;
    }

    public void setWorkexpeList(List<Workexpe> workexpeList) {
        this.workexpeList = workexpeList;
    }

    @XmlTransient
    public List<Ratingscore> getRatingscoreList() {
        return ratingscoreList;
    }

    public void setRatingscoreList(List<Ratingscore> ratingscoreList) {
        this.ratingscoreList = ratingscoreList;
    }

    public Familyback getFamilyback() {
        return familyback;
    }

    public void setFamilyback(Familyback familyback) {
        this.familyback = familyback;
    }

    @XmlTransient
    public List<Civilservice> getCivilserviceList() {
        return civilserviceList;
    }

    public void setCivilserviceList(List<Civilservice> civilserviceList) {
        this.civilserviceList = civilserviceList;
    }

    @XmlTransient
    public List<Staffscore> getStaffscoreList() {
        return staffscoreList;
    }

    public void setStaffscoreList(List<Staffscore> staffscoreList) {
        this.staffscoreList = staffscoreList;
    }

    @XmlTransient
    public List<Referenceinfo> getReferenceinfoList() {
        return referenceinfoList;
    }

    public void setReferenceinfoList(List<Referenceinfo> referenceinfoList) {
        this.referenceinfoList = referenceinfoList;
    }

    public Personalinfo getPersonalinfo() {
        return personalinfo;
    }

    public void setPersonalinfo(Personalinfo personalinfo) {
        this.personalinfo = personalinfo;
    }

    public Otherinfo getOtherinfo() {
        return otherinfo;
    }

    public void setOtherinfo(Otherinfo otherinfo) {
        this.otherinfo = otherinfo;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUserType() {
        return userType;
    }

    public void setUserType(String userType) {
        this.userType = userType;
    }



    @XmlTransient
    public List<Trainingprog> getTrainingprogList() {
        return trainingprogList;
    }

    public void setTrainingprogList(List<Trainingprog> trainingprogList) {
        this.trainingprogList = trainingprogList;
    }

    @XmlTransient
    public List<Children> getChildrenList() {
        return childrenList;
    }

    public void setChildrenList(List<Children> childrenList) {
        this.childrenList = childrenList;
    }

    @XmlTransient
    public List<Specialskills> getSpecialskillsList() {
        return specialskillsList;
    }

    public void setSpecialskillsList(List<Specialskills> specialskillsList) {
        this.specialskillsList = specialskillsList;
    }

    @XmlTransient
    public List<Educback> getEducbackList() {
        return educbackList;
    }

    public void setEducbackList(List<Educback> educbackList) {
        this.educbackList = educbackList;
    }

    @XmlTransient
    public List<Voluntarywork> getVoluntaryworkList() {
        return voluntaryworkList;
    }

    public void setVoluntaryworkList(List<Voluntarywork> voluntaryworkList) {
        this.voluntaryworkList = voluntaryworkList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idClients != null ? idClients.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Clients)) {
            return false;
        }
        Clients other = (Clients) object;
        if ((this.idClients == null && other.idClients != null) || (this.idClients != null && !this.idClients.equals(other.idClients))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return this.lastName + ", " + this.firstName;
    }

    public String getInstitute() {
        return institute;
    }

    public void setInstitute(String institute) {
        this.institute = institute;
    }

}

假设您在
PersonalInfo
类中尝试此功能并进行检查

@OneToOne 
@JoinColumn(name = "idClients")
private Clients clients;

问题在于插入,但您应该向我们展示进行插入的代码,甚至SQL本身。您尝试插入的行很可能违反了外键约束。它的父类是否存在?请发布personalinfo和client类。映射中似乎有问题。@Tim是的,我先保存客户端,然后尝试插入个人信息。尝试过,但我得到了以下错误:只有一个可以定义为可写,所有其他的都必须指定为只读。是否可以共享异常或stacktrace。异常[EclipseLink-48](Eclipse持久性服务-2.5.2.v20140319-9ad6abd):org.Eclipse.Persistence.exceptions.DescriptorException异常描述:字段[personalinfo.IdClients]存在多个可写映射。只有一个映射可以定义为可写,其他所有映射必须指定为只读。