Java 休眠未保存的子对象

Java 休眠未保存的子对象,java,mysql,hibernate,Java,Mysql,Hibernate,我有一个Employee和Employee Dept表。一名员工可以有多个部门 我在MySQL中定义了表,并使用JPA生成了实体 package model; import java.io.Serializable; import javax.persistence.*; import java.util.List; /** * The persistent class for the emp1000 database table. * */ @Entity @NamedQuery

我有一个Employee和Employee Dept表。一名员工可以有多个部门

我在MySQL中定义了表,并使用JPA生成了实体

package model;

import java.io.Serializable;
import javax.persistence.*;
import java.util.List;


/**
 * The persistent class for the emp1000 database table.
 * 
 */
@Entity
@NamedQuery(name="Emp1000.findAll", query="SELECT e FROM Emp1000 e")
public class Emp1000 implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String firstName;

    private String lastName;

    //bi-directional many-to-one association to EmpDept
    @OneToMany(mappedBy="emp1000")
    private List<EmpDept> empDepts;

    public Emp1000() {
    }

    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFirstName() {
        return this.firstName;
    }

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

    public String getLastName() {
        return this.lastName;
    }

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

    public List<EmpDept> getEmpDepts() {
        return this.empDepts;
    }

    public void setEmpDepts(List<EmpDept> empDepts) {
        this.empDepts = empDepts;
    }

    public EmpDept addEmpDept(EmpDept empDept) {
        getEmpDepts().add(empDept);
        empDept.setEmp1000(this);

        return empDept;
    }

    public EmpDept removeEmpDept(EmpDept empDept) {
        getEmpDepts().remove(empDept);
        empDept.setEmp1000(null);

        return empDept;
    }

}



@Entity
@Table(name="emp_dept")
@NamedQuery(name="EmpDept.findAll", query="SELECT e FROM EmpDept e")
public class EmpDept implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    @Column(name="emp_dept")
    private String empDept;

    //bi-directional many-to-one association to Emp1000
    @ManyToOne
    @JoinColumn(name="emp_id")
    private Emp1000 emp1000;

    public EmpDept() {
    }

    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getEmpDept() {
        return this.empDept;
    }

    public void setEmpDept(String empDept) {
        this.empDept = empDept;
    }

    public Emp1000 getEmp1000() {
        return this.emp1000;
    }

    public void setEmp1000(Emp1000 emp1000) {
        this.emp1000 = emp1000;
    }

}

您需要将持久化操作级联到子实体。将映射更改为

@OneToMany(mappedBy="emp1000", cascade = CascadeType.ALL)
使用


如果我们同时使用hibernate和jpa,而不是使用javax.persistence.CascadeType.ALL,则会出现一个问题。

我尝试过,但出现了一个错误。。鉴于上述帖子中的错误,
emp#u部门id
列的数据库类型是什么?我将列类型更改为
id
int(11)NOT NULL AUTO#u INCREMENT,即;添加了AUTO_INCREMENT并开始工作…谢谢这就是为什么我问你,
AUTO_INCREMENT
应该已经存在了,如果你让Hibernate自动生成表的话。不客气,很高兴您能让它工作。还有一个问题..我是否需要显式设置部门对象d1.setEmp1000(e1),即使这些部门与该员工相关-e1.setEmpDepts(deptlist);
Feb 25, 2015 8:43:43 AM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: Field 'id' doesn't have a default value
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [model.EmpDept]
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
@OneToMany(mappedBy="emp1000", cascade = CascadeType.ALL)
@Cascade({org.hibernate.annotations.CascadeType.ALL})