org.hibernate.HibernateException в базовой программе гибернации - PullRequest
0 голосов
/ 17 августа 2010

Я получаю следующую ошибку 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 голосов
/ 17 августа 2010

MySQL поддерживает собственный генератор:

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

Но это предполагает, что таблица была создана с использованием атрибута AUTO_INCREMENT в столбце ID для создания уникального идентификатора для новых строк.

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

Вы должны позволить SchemaExport сгенерировать ваш DDL для вас.

Ссылки

0 голосов
/ 08 января 2012

У меня была такая же проблема, и установка автоинкремента на клавиши решила ее.

0 голосов
/ 17 августа 2010

Мое первое предположение заключается в том, что ваша база данных не поддерживает собственные идентификаторы. Вы должны указать генератор, отличный от "native" (который используется по умолчанию) в вашем файле отображения для ваших первичных ключей.

Попробуйте "increment", это говорит Hibernate обрабатывать генерацию идентификатора, а не полагаться на базу данных Имейте в виду, однако, что он не будет работать на кластерах:

<id name="...">
    <column name="..." />
    <generator class="increment" />
</id>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...