基本的hibernate程序中的org.hibernate.HibernateException

时间:2010-08-17 08:29:43

标签: java mysql hibernate orm

我收到以下错误session.save(student);

org.hibernate.HibernateException: The database returned no natively generated identity value

这是主要功能

{
  BasicConfigurator.configure();
  Session session = HibernateUtil.getSessionFactory().openSession();
  Transaction transaction = null;
  try {
   transaction = session.beginTransaction();
   Address address = new Address("Outer Ring Road", "Delhi", "TN", "110001");
   Student student = new Student("kumar", address);
   session.save(student);
   transaction.commit();
     } catch (HibernateException e) {

   if (transaction != null) {
      transaction.rollback();

    }
   e.printStackTrace();
  } finally {
   session.close();
 }
}

3 个答案:

答案 0 :(得分:0)

我的第一个猜测是您的数据库不支持本机生成的标识符。您必须在映射文件中为主键指定“native”(默认值)以外的生成器。

尝试“增量”,这告诉Hibernate处理标识符生成而不是依赖数据库。但请记住,它不适用于集群:

<id name="...">
    <column name="..." />
    <generator class="increment" />
</id>

答案 1 :(得分:0)

MySQL DOES 支持本机生成器:

<id name="userID" column="userID">
  <generator class="native"/>
</id>

但是这假设已使用ID列上的AUTO_INCREMENT属性创建表,以便为新行生成唯一标识。

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
 );

您应该让SchemaExport为您生成DDL。

参考

答案 2 :(得分:0)

我有同样的问题,并且在键上设置自动增量解决了它。