2013-06-12 17 views
5

Hazırda bekletme için yeni bir kimlik sütunu kullanamıyorum. Java programımı jeneratörü kimliğini kullanarak çalıştırdığımda, tablodaki kimlik sütununa "... varsayılan veya boş değer ekleyemez" hatası verir. Artışı jeneratör olarak kullandığımda, "... identity_insert kapalı" hatası veriyor.Hazırda beklet ve MS SQL Server Kimlik sütunu

Birisi lütfen bu sorunu nasıl düzelteceğime rehberlik edebilir, böylece masamla Hazırda Bekletme özelliğini kullanabilir miyim? Başka bilgi vermem gerekirse lütfen bildirin.

aşağıdaki kavanozları kullanıyorum:

  • hazırda-commons-ek açıklamalar-4.0.1.Final.jar
  • hazırda-çekirdek-4.1.9.Final.jar
  • hibernate- JPA-2,0-api-1.0.1.Final.jar
  • sqljdbc4.jar

Benim Tablo:

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 Element sınıfı:

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> 

cevap

1

jeneratör sınıfına

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

Merhaba Shazin,
Cevabınız için teşekkür ederiz.
Aşağıdakileri denedim, ancak hepsi birlikte gösterilen hatalarla başarısız oldu:
yerel - DEFAULT veya NULL, açık kimlik değerleri olarak izin verilmiyor. [n/a]
artış - IDENTITY_INSERT öğesi KAPALI olarak ayarlandığında 'Audit_Records' tablosunda kimlik sütunu için açık değer eklenemiyor.
kimlik - DEFAULT veya NULL, açık kimlik değerleri olarak kullanılamaz.
dizisi - 'value' yakınında yanlış sözdizimi. Atanan - aynı tanıtıcı değerine sahip farklı bir nesne oturumla zaten ilişkilendirilmişti.

1

sqljdbc4.jar kullanımı, MS SQL Server kullanılıyor anlaşılacağı ancak lehçesi HSQLDialect ayarlandığında olarak native deneyin. Bu çözmelidir ...

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

- native Kimlik nesil sağlanması SQL Server ile uyumlu değerleri kullanır: olarak değiştirin.