Có vẻ như có vấn đề giữa cột Eclipslink và Derby Auto-Icrement khi tôi chèn giá trị thông qua UnitOfWork.Derby Auto-Increment và Eclipselink UnitOfWork
SessionFactory sessionFactory = new SessionFactory("default");
Session session = sessionFactory.getSharedSession();
UnitOfWork uow = session.acquireUnitOfWork();
SysUser usr2 = new SysUser();
usr2.setUserName("test");
usr2.setUserPassword("test");
uow.registerObject(usr2);
uow.commit();
Đây là SQL EclipseLink tạo ra: "Cố gắng để sửa đổi một cột sắc 'DB_ID"
INSERT INTO APP.SYS_USER (DB_ID, CREATED, STATUS, USER_NAME, USER_PASSWORD) VALUES (?, ?, ?, ?, ?) bind => [0, null, null, testinsert, test]
quả trong một Ngoại lệ.
Đây là SQL tôi muốn nó được tạo ra:
INSERT INTO APP.SYS_USER (USER_NAME, USER_PASSWORD) VALUES (?, ?) bind => [testinsert, test]
Tôi đã thử INSERT INTO SYS_USER(USER_NAME, USER_PASSWORD) VALUES('tesetinsert2', 'test')
và các công trình này tốt.
Có tệp bản đồ xml hay gì đó giải quyết vấn đề này hoặc tôi có thể định cấu hình Derby để bỏ qua các giá trị null đó không?
EDIT: đây là bảng:
CREATE TABLE SYS_USER (
"DB_ID" INTEGER NOT NULL DEFAULT AUTOINCREMENT: start 1 increment 1 ,
"USER_NAME" VARCHAR(64) NOT NULL ,
"USER_PASSWORD" VARCHAR(64) NOT NULL ,
"STATUS" VARCHAR(64) DEFAULT 'ACTIVE' ,
"CREATED" TIMESTAMP DEFAULT current_timestamp
, CONSTRAINT "SQL110614114038650" PRIMARY KEY ("DB_ID"));
EDIT: đây là một phần của Entity:
@Table(name = "SYS_USER")
@Entity
public class SysUser implements Serializable {
@Column(name = "DB_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
private int dbId;
Giải pháp là sử dụng "Entity Manager" thay vì "Đơn vị làm việc ". Dường như UnitOfWork không hỗ trợ các cột Auto-increment của Derby.
Tôi sẽ không chấp nhận giải pháp của riêng mình cho nó không phải là giải pháp trực tiếp với UnitOfWork. Có thể có ai đó có cùng vấn đề này và tôi muốn tìm hiểu xem đây có phải là BUG của UnitOfWork hay chỉ tài liệu kém.