我的Employee课程如下,OneToMany与Education的关系
@Entity
public class Employee {
@Id
@GeneratedValue
private int empId;
private String empName;
@Temporal(TemporalType.DATE)
private Date empDob;
@Temporal(TemporalType.TIMESTAMP)
private Date empDoj;
private Long empPhone;
@OneToMany(cascade=CascadeType.PERSIST)
//setter and getters
}
@Entity
public class Education {
@Id
@GeneratedValue
private Integer aadharNum;
private String collegeName;
private String schoolName;
private String companyName;
// setter and getter
}
public class HibernateTest {
public static void main(String[] args) {
try {
Employee employee=new Employee();
employee.setEmpName("Sri");
employee.setEmpId(7664);
employee.setEmpDob(new java.util.Date());
employee.setEmpDoj(new java.util.Date());
employee.setEmpPhone(8102087655l);
Education education=new Education();
education.setSchoolName("Neo Royal School");
education.setCollegeName("IIT Gu");
education.setCompanyName("Insys");
Education education2=new Education();
education2.setSchoolName("Royal School");
education2.setCollegeName("IIT Hyd");
education2.setCompanyName("IM");
employee.getEducation().add(education);
employee.getEducation().add(education2);
SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
Session session=sessionFactory.openSession();
session.beginTransaction();
session.persist(employee);
session.getTransaction().commit();
session.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
这是因为您手动为您的员工实体分配了一个尚未由Hibernate管理的ID。
删除此employee.setEmpId(7664);
时它应该有效
然后,Hibernate将为您自动生成ID(因为@GeneratedValue
)。
答案 1 :(得分:0)
问题是,对于你的empId,你正在使用@GeneratedValue注释。这意味着当你持久化一个新实体时,id字段应该留空,你必须让jpa提供者填写它。
所以要么删除@GeneratedValue
@Id
private int empId;
或者不要明确设置empId