2013-06-12 81 views
5

Tôi mới dùng Hibernate và không thể sử dụng cột Identity. Khi tôi chạy chương trình java của tôi bằng cách sử dụng danh tính như máy phát điện, nó cung cấp cho các lỗi rằng nó "... không thể chèn giá trị mặc định hoặc null" trong cột nhận dạng trong bảng. Khi tôi sử dụng tăng như máy phát điện, nó cung cấp cho các lỗi rằng "... identity_insert được thiết lập để tắt".Hibernate và MS SQL Server Identity cột

Ai đó có thể vui lòng hướng dẫn tôi cách khắc phục sự cố này để tôi có thể sử dụng Hibernate với bảng của mình? Vui lòng cho tôi biết nếu tôi cần cung cấp bất kỳ thông tin nào khác.

Tôi đang sử dụng các lọ sau:

  • hibernate-commons-chú thích-4.0.1.Final.jar
  • hibernate-core-4.1.9.Final.jar
  • hibernate- JPA-2,0-api-1.0.1.Final.jar
  • sqljdbc4.jar

Bảng của tôi:

01.
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 Yếu tố Class:

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> 

Trả lời

1

Hãy thử native như lớp phát

<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,
Cảm ơn bạn đã trả lời.
Tôi đã thử những điều sau đây, nhưng tất cả đều thất bại với các lỗi được hiển thị cùng với:
bản địa - DEFAULT hoặc NULL không được phép làm giá trị nhận dạng rõ ràng. [n/a]
tăng - Không thể chèn giá trị rõ ràng cho cột nhận dạng trong bảng 'Audit_Records' khi IDENTITY_INSERT được đặt thành TẮT.
danh tính - DEFAULT hoặc NULL không được phép làm giá trị nhận dạng rõ ràng.
trình tự - Cú pháp không chính xác gần 'giá trị'.
được chỉ định - một đối tượng khác có cùng giá trị số nhận dạng đã được liên kết với phiên.

1

Việc sử dụng sqljdbc4.jar cho MS SQL Server đang được sử dụng nhưng phương ngữ được thiết lập để HSQLDialect. Thay đổi điều này thành:

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

... nên giải quyết việc này - đảm bảo native Tạo ID sử dụng các giá trị tương thích với SQL Server.

Các vấn đề liên quan