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

Java 基本hibernate程序中的org.hibernate.HibernateException,java,mysql,hibernate,orm,Java,Mysql,Hibernate,Orm,我得到以下错误session.save(学生) 这里是主要功能 { BasicConfigurator.configure(); Session session = HibernateUtil.getSessionFactory().openSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); Address address = new Ad

我得到以下错误
session.save(学生)

这里是主要功能

{
  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();
 }
}

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

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

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

MySQL是否支持本机生成器:

<id name="userID" column="userID">
  <generator class="native"/>
</id>
您应该让
SchemaExport
为您生成DDL

参考文献

我也遇到了同样的问题,在按键上设置自动递增解决了这个问题。

您的SGBD的名称是什么?我使用的是MySQL workbench 5.2 CE数据库。驱动程序类是com.mysql.jdbc.DriverCan您可以发布用于映射学生和地址类的映射。这可能有助于调试您的问题。当询问Hibernate问题时:告诉我们您使用的是什么DB/方言,发布您的映射、表和确切的堆栈跟踪。
<id name="userID" column="userID">
  <generator class="native"/>
</id>
CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
 );