2011-11-24 13 views
5

UnitOfWork üzerinden değer eklediğimde Eclipslink ve Derby Auto-Icrement sütunu arasında bir sorun var gibi görünüyor.Derby Auto-Increment ve 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(); 

İşte SQL EclipseLink oluşturulan bulunuyor: "kimlik sütunu 'DB_ID' değiştirmek teşebbüs"

INSERT INTO APP.SYS_USER (DB_ID, CREATED, STATUS, USER_NAME, USER_PASSWORD) VALUES (?, ?, ?, ?, ?) bind => [0, null, null, testinsert, test] 

Sonucu bir in İstisna.

İşte ben oluşturulan istediğiniz SQL: Ben INSERT INTO SYS_USER(USER_NAME, USER_PASSWORD) VALUES('tesetinsert2', 'test') denedim

INSERT INTO APP.SYS_USER (USER_NAME, USER_PASSWORD) VALUES (?, ?) bind => [testinsert, test] 

ve bu iyi çalışıyor.

Bir harita dosyası xml var mı yoksa bu sorunu çözüyor mu, yoksa bu boş değeri atlamak için Derby'i yapılandırabilir miyim?

DÜZENLEME:

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")); 

DÜZENLEME:

@Table(name = "SYS_USER") 
@Entity 
public class SysUser implements Serializable { 
    @Column(name = "DB_ID") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Id 
    private int dbId; 

çözüm İşin "Varlık Yöneticisi" yerine "nin Birimini kullanmaktır: Burada idarenin parçası burada masamdı ". UnitOfWork'un Derby'nin Auto-increment sütunlarını desteklemediği görülüyor.

UnitOfWork ile doğrudan bir çözüm olmadığı için kendi çözümümü kabul etmeyeceğim. Birisi aynı sorunu var olabilir ve bu bir UnitOfWork veya sadece fakir belgelenmiş bir HATA olup olmadığını öğrenmek istiyorum.

cevap

1

EclipseLink yerel API'sini (UnitOfWork) kullanmak, Derby ve oluşturulan kimlikleri ile ilgili olarak JPA ile aynı şekilde çalışmalıdır. Alanı, tanımlayıcınızdaki dizilimi kullanarak bildirdiğinizden emin olun ve platformunuzu Derby'ye ayarlayın ve yerel sıralamayı ayarlayın.