Собственный класс генератора гибернации не увеличивает мой столбец user_id - PullRequest
1 голос
/ 22 ноября 2011

Я использую следующий файл отображения гибернации

<class name="com.abdus.hibernate.UserTable" table="tbl_users">
    <meta attribute="class-description">
        This class contains the user details.
    </meta>
    <id name="userId" type="long" column="userId">
        <generator class="native" />
    </id>
    <property name="firstName" type="string" column="firstName" not-null="true" />
    <property name="lastName" type="string" column="lastName" not-null="true" />
    <property name="emailId" type="string" column="emailId" not-null="true" />
    <property name="password" type="string" column="password" not-null="true" />
</class>

А вот мой код для вставки новой записи

public Long add(UserDomain userDomain) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction transaction = null;
    Long userId = null;
    try {
        transaction = session.beginTransaction();
        UserTable userTable = new UserTable();
        userTable.setFirstName(userDomain.getFirstName());
        userTable.setLastName(userDomain.getLastName());
        userTable.setEmailId(userDomain.getEmailId());
        userTable.setPassword(userDomain.getPassword());
        userId = (Long) session.save(userTable);
        System.out.println("userId returned is " + userId);
        transaction.commit();
        userTable.toString();
    } catch (Exception e) {
        transaction.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }
    return userId;
}

Но я вижу, чтокаждый раз, когда я вставляю запись, всегда вставляется user_id как 1. То есть в БД всегда есть только одна запись с user_id 1. Почему hibernate не увеличивает значение user_id каждый раз, когда я вставляю запись?

Ответы [ 4 ]

1 голос
/ 22 ноября 2011

Я никогда не использовал это раньше, но в спецификации нативный вариант объясняется ниже.

Он выбирает идентичность, последовательность или hilo, в зависимости от базы данных.

Это как-то расплывчато для меня.

То, что я понимаю, зависит от базы данных, она будет выбирать разные идентификаторы, и база данных физически должна иметь объект, например, идентификатор или последовательность.

Для меня я использую Oracle, поэтому я специально использую

 <generator class="sequence">
            <param name="sequence">SEQUENCE_NAME</param>
 </generator>

Если вы используете одну отдельную БД, пожалуйста, используйте более конкретный класс. Надеюсь, это поможет.

1 голос
/ 22 ноября 2011

1001 * попробовать *

<generator class="increment"/>

Надеюсь, это решит проблему.

0 голосов
/ 13 августа 2015
<generator class="native"/> 

генерирует ошибки при подключении к базе данных Sybase.

Для этой цели мы попытались использовать

<generator class="increment"/> 
0 голосов
/ 01 декабря 2011
Finally i resolved this. I had this in the hibernate.cfg.xml file <property name="hbm2ddl.auto">create</property>

This was causing the schema to be created every time. So i did two things to resolve my issue
- remove the following <property name="hbm2ddl.auto">create</property>
- create the table with auto-increment
...