我自学spring框架的时在整合hibernate的时候出现了以下的问题:
Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: ids for this class must be manually assigned before calling save(): Employee.Employee; nested exception is org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): Employee.Employee
Caused by: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): Employee.Employee
at org.hibernate.id.Assigned.generate(Assigned.java:53)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:635)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:632)
at Employee.EmployeeDaoImpl.add(EmployeeDaoImpl.java:15)
at Employee.EmployeeDaoImpl.main(EmployeeDaoImpl.java:20)
我找了很久不知道是哪里错了,请大家帮我看下,以下是我的配置文件和测试类
applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="sessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
 </bean>
<bean id="EmployeeDaoImpl" class="Employee.EmployeeDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
</beans>hibernate配置文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration> <session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/myuser
</property>
<property name="connection.username">root</property>
<property name="connection.password">admin</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">Mysql</property>
<mapping resource="Employee/Employee.hbm.xml" /> </session-factory></hibernate-configuration>以下是我的测试代码:package Employee;import java.util.Date;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class EmployeeDaoImpl extends HibernateDaoSupport{
public void add(){
Employee e  = new Employee();
e.setName("123");
e.setPassword("123");
e.setBirthday(new Date());
this.getHibernateTemplate().save(e);
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
EmployeeDaoImpl em = (EmployeeDaoImpl) context.getBean("EmployeeDaoImpl");
em.add();
}}

解决方案 »

  1.   

    可能是配置映射文件 XXX.hbm.xml 的问题主键没有生成,如果主键不是程序生成的,主键那的,generator 属性可以写成 native。
    如:<id name="id" type="java.lang.Integer">
          <column name="id" />
          <generator class="native"/>
    </id>
      

  2.   

    org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): Employee.Employee错误提示的意思是:保存之前必须指定主键。
    解决思路可以参考1楼。