2013-06-12 26 views
5

私はHibernateを初めて使用しており、Identity列を使用できません。 IDをジェネレータとして使用してJavaプログラムを実行すると、表のID列に "...デフォルト値またはNULL値を挿入できません"というエラーが表示されます。増分をジェネレータとして使用すると、「... identity_insertがオフに設定されています」というエラーが表示されます。HibernateとMS SQL Server Identity列

誰かが私のテーブルでHibernateを使用できるようにこの問題を解決する方法を教えてもらえますか?他の情報を提供する必要がある場合は、私にお知らせください。

私は次のjarファイルを使用しています:

  • 休止・コモンズ・注釈・4.0.1.Final.jar
  • 休止状態 - コア - 4.1.9.Final.jar
  • hibernate- JPA-2.0-API-1.0.1.Final.jar
  • あるsqljdbc4.jar

マイ表:

Create Table ABC (
    Unique_Number int IDENTITY(1,1), 
    Col1 varchar(100), 
    Col2 char(10), 
    CONSTRAINT pk_ABC_id PRIMARY KEY(Unique_Number) 
) 

のhbm.xml:

<class name="org.data.ABCData" table="ABC"> 
    <meta attribute="class-description">This is a test class.</meta> 
    <id name="uniqueNumber" type="int" column="Unique_Number"> 
     <generator class="identity"/> <!-- tried identity, increment --> 
    </id> 
    <property name="col1" column="Col1" type="string" length="100"/> 
    <property name="col2" column="Col2" type="string" length="10"/> 
</class> 

ABC要素クラス:

public class ABC { 

    private int uniqueNumber; 
    private String col1; 
    private String col2; 

    public int getUniqueNumber() { 
     return uniqueNumber; 
    } 

    public void setUniqueNumber(int uniqueNumber) { 
     this.uniqueNumber = uniqueNumber; 
    } 

    public int getCol1() { 
     return col1; 
    } 

    public void setCol1(String col1) { 
     this.col1 = col1; 
    } 

    public int getCol2() { 
     return col2; 
    } 

    public void setCol2(String col2) { 
     this.col2 = col2; 
    } 
} 

をhibernate.cfg.xml:

<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.connection.driver_class"></property> 
    <property name="hibernate.connection.url"></property> 
    <property name="hibernate.connection.username"></property> 
    <property name="connection.password"></property> 
    <property name="connection.pool_size">1</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> 
    <property name="show_sql">false</property> 
    <mapping resource="data.hbm.xml"/> 
</session-factory> 
</hibernate-configuration> 

答えて

1

はジェネレータクラス

<id name="uniqueNumber" type="int" column="Unique_Number"> 
    <generator class="native"/> <!-- This will pick identity, sequence or hilo based on type --> 
</id> 
+0

こんにちはシャジン、
ご返信ありがとうございます。
私は次のように試しましたが、これらのエラーはすべて失敗しました。
native - DEFAULTまたはNULLは明示的なID値として使用できません。 [n/a]
増分 - IDENTITY_INSERTがOFFに設定されている場合、テーブル 'Audit_Records'のID列に明示的な値を挿入できません。
identity - DEFAULTまたはNULLは明示的なID値として使用できません。
シーケンス - 'value'の近くの構文が正しくありません。
が割り当てられました - 同じ識別子値を持つ別のオブジェクトが既にセッションに関連付けられていました。

1

sqljdbc4.jarの使用は、MS SQL Serverが使用されている示唆しているが、方言がHSQLDialectに設定されているようnativeを試してみてください。これを解決する必要があります...

<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property> 

- 確保native ID生成は、SQL Serverとの互換性の値を使用しています。これを変更します。