2013-06-12 17 views
5

Sono nuovo di Hibernate e sono in grado di utilizzare una colonna Identity. Quando eseguo il mio programma java usando l'identità come generatore, si dà l'errore che "... non può inserire il valore predefinito o nullo" nella colonna Identity nella tabella. Quando uso incrementare come generatore, dà l'errore che "... identity_insert è impostato su off".Hibernate e colonna MS SQL Server Identità

Qualcuno può per favore mi guida come risolvere questo problema in modo da poter usare Hibernate con il mio tavolo? Per favore fatemi sapere se ho bisogno di fornire altre informazioni.

Sto utilizzando i seguenti vasi:

  • Hibernate-commons-annotazioni-4.0.1.Final.jar
  • hibernate-core-4.1.9.Final.jar
  • hibernate- APP-2.0-api-1.0.1.Final.jar
  • sqljdbc4.jar

mia tavola:

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 Elemento Classe:

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> 

risposta

1

Prova native come classe generatore

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

Hi Shazin,
Grazie per la risposta.
Ho provato quanto segue, ma tutti falliti con gli errori mostrati insieme a:
nativo - default o NULL non sono ammessi come valori di identità espliciti. [N/a]
incremento - Non è possibile inserire il valore esplicito per la colonna identity nella tabella 'Audit_Records' quando IDENTITY_INSERT è impostato su OFF.
identità - DEFAULT o NULL non sono consentiti come valori di identità espliciti.
sequenza - Sintassi non corretta vicino a "valore".
assegnato - un oggetto diverso con lo stesso valore identificativo è stato già associato alla sessione.

1

L'uso di sqljdbc4.jar suggerisce MS SQL Server viene utilizzato, ma il dialetto è impostato HSQLDialect. Modificare questa a:

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

... dovrebbe risolvere questo - garantire native generazione ID utilizza valori compatibili con SQL Server.