hibernate生成器本机类不会增加我的user_id列

时间:2011-11-22 16:19:42

标签: hibernate class generator native

我正在使用以下hibernate映射文件

<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.意思是DB中只有一条记录带有user_id 1.为什么hibernate每次都不会增加user_id的值插入记录?

4 个答案:

答案 0 :(得分:1)

<generator class="increment"/>

我希望它能解决问题。

答案 1 :(得分:1)

我以前从未使用过这个,但在规范中,Native选项解释如下。

  

它根据数据库选择标识,序列或hilo。

对我来说有点模糊。

我所知道的是取决于数据库,它会选择不同的ID,并且数据库在物理上必须具有对象,例如,标识或序列。

对我来说,我正在使用Oracle,所以我特意使用

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

如果您使用的是某个特定数据库,请使用更具体的类。 希望这会有所帮助。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

<generator class="native"/> 

连接到Sybase数据库时生成错误。

为此,我们尝试使用

<generator class="increment"/>