2013-06-12 25 views
5

Jestem nowy w Hibernate i nie mogę użyć kolumny Identity. Kiedy uruchamiam mój program java za pomocą tożsamości jako generatora, daje to błąd, że "... nie może wstawić wartości domyślnej lub wartości pustej" w kolumnie tożsamości w tabeli. Kiedy używam inkrementacji jako generatora, daje to błąd, że "... identity_insert jest wyłączony".Hibernate i MS SQL Server Identity column

Czy ktoś może mnie poprowadzić, jak rozwiązać ten problem, aby móc używać Hibernate z moim stołem? Daj mi znać, jeśli chcę podać inne informacje.

Używam następujące słoiki:

  • hibernate-commons-adnotacje-4.0.1.Final.jar
  • hibernate-core-4.1.9.Final.jar
  • hibernate- JPA-2,0-api 1.0.1.Final.jar
  • sqljdbc4.jar

My Tabela:

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 Klasa:

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> 

Odpowiedz

1

Spróbuj native jako klasy generatora

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

Witaj Shazin,
Dziękuję za odpowiedź.
Próbowałem następujące, ale wszystkie nie powiodło się z błędami pokazanymi wraz z:
native - DEFAULT lub NULL nie są dozwolone jako jawne wartości tożsamości. [n/d]
inkrementacja - Nie można wstawić jawnej wartości dla kolumny tożsamości w tabeli "Audit_Records", gdy IDENTITY_INSERT jest ustawione na OFF.
Identyfikacja - DEFAULT lub NULL nie są dozwolone jako jawne wartości tożsamości.
sekwencja - Niepoprawna składnia w pobliżu "wartości".
przypisana - inny obiekt z tą samą wartością identyfikatora był już powiązany z sesją.

1

Zastosowanie sqljdbc4.jar sugeruje MS SQL Server jest używany, ale dialekt jest ustawiony na HSQLDialect. Zmienić na:

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

... powinno rozwiązać ten problem - zapewnienie native generacji ID wykorzystuje wartości zgodnych z SQL Server.

Powiązane problemy