2011-11-22 78 views
1

我用下面的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> 

,這裏是我的代碼中插入一個新的記錄我的user_id列

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的值?

回答

1

嘗試

<generator class="increment"/> 

我希望它解決了這個問題。

+0

這個作品,如果我重複同一個JVM中的刀片。如果我重新啓動服務器,則增量值會重新設置爲1。我注意到不只是這樣,但是如果我插入讓我們說3個記錄ina單個JVM,當我重新啓動服務器並插入一條記錄,所有3個以前的記錄都消失了,只有新的記錄存在。冬眠非常奇怪 –

1

我從來沒有使用過,但在規範中,Native選項解釋如下。

它根據數據庫選擇身份,序列或hilo。

這對我來說有些模糊。

我所說的是取決於數據庫,它會選擇不同的ID,而物理上的數據庫必須有對象,例如標識或序列。

對於我來說,我使用的是Oracle,所以我sepecifically使用

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

如果您正在使用一個sepecific DB,請使用更具體的類。 希望這會有所幫助。

+0

'我正在使用MYSQL。我改變了我的表,以這種方式創建 'CREATE TABLE tbl_users ( 用戶ID整數NOT NULL AUTO_INCREMENT, 姓VARCHAR(100)NOT NULL, 姓氏VARCHAR(100)NOT NULL, EMAILID VARCHAR(100)NOT NULL, 密碼VARCHAR(50), PRIMARY KEY(用戶ID) );' 並寫在映射文件以下 '<發生器類= 「增量」/>' 這確實增量在相同的JVM,但是當服務器重啓它再次重置。 ' –

+0

什麼是身份optionns。 http://stackoverflow.com/questions/1838520/hibernate-problems-with-auto-increment-id-mysql-5 – exiter2000

+0

我也使用了身份。同樣的問題「這在相同的JVM中會增加,但是當服務器重新啓動時,它將被重新設置。」 –

0
​​
0
<generator class="native"/> 

產生的錯誤,同時連接到Sybase數據庫。

爲此,我們嘗試使用

<generator class="increment"/>