当我尝试通过hib持久层保存一些数据时,遇到异常,异常如下
org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): hbm.Employee
public void saveEmployee(Employee empValue) {
Session session = null;
Transaction tx = null;
session = HibernateSessionFactory.getSession();
tx = session.beginTransaction();
Employee emp;
if (empValue.getEmpcode() != null) {
emp = (Employee) session.get(Employee.class, empValue.getEmpcode());
if (emp != null) {
System.out.println("Test");
emp.setEmpcode(empValue.getEmpcode());
emp.setDepartment(createDepartment("DEEE"));
emp.setEmpfname(empValue.getEmpfname());
emp.setEmplname(empValue.getEmplname());
emp.setEmpdob(empValue.getEmpdob());
emp.setEmpstatus(empValue.getEmpstatus());
emp.setEmptelno(empValue.getEmptelno());
emp.setAuditfield(empValue.getAuditfield());
session.update(emp);
}
} else
{
emp = new Employee();
emp.setEmpcode(empValue.getEmpcode());
emp.setDepartment(createDepartment("DEEE"));
emp.setEmpfname(empValue.getEmpfname());
emp.setEmplname(empValue.getEmplname());
emp.setEmpdob(empValue.getEmpdob());
emp.setEmpstatus(empValue.getEmpstatus());
emp.setEmptelno(empValue.getEmptelno());
emp.setAuditfield(empValue.getAuditfield());
session.save(emp);
}
tx.commit();
}
正如您所看到的,类被分配在适当的位置,我对异常感到困惑,希望得到一些帮助..
4条答案
按热度按时间xggvc2p61#
这个异常表明你没有给Employee类中标记为@id的字段赋值。这个类看起来是什么样子的?你是试图通过提供的生成器之一生成Id值还是想手动设置它们?
brqmpdu12#
异常消息
ids for this class must be manually assigned before calling save()
是自解释的。发生这种情况是因为您使用的是
assigned
内置生成器。assigned
生成器显式地告诉Hibernate应用程序将分配标识符。从5.1.4.1节。生成器:让应用程序在调用
save()
之前为对象分配一个标识符。如果没有指定<generator>
元素,这是默认策略。如果这不是您想要的,请使用另一个生成器,例如
native
(此 * 选择identity
,sequence
或hilo
,具体取决于底层数据库的功能 *):vh0rcniy3#
使用以下类型的代码来保存员工,如果这没有帮助,请粘贴Map文件以了解字段empCode的详细信息。
jobtbby34#
如果你正在使用spring-boot JPA,那么你可以简单地添加这个注解:
当持久化层没有一个选项来为实体的主键生成/创建值时,这个问题就出现了。
您可以查看GenerationType的java文档