Java Derby自动增量和Eclipselink单位工时

Java Derby自动增量和Eclipselink单位工时,java,jakarta-ee,eclipselink,derby,Java,Jakarta Ee,Eclipselink,Derby,当我通过UnitOfWork插入值时,Eclipslink和Derby Auto Icrement列之间似乎存在问题 SessionFactory sessionFactory = new SessionFactory("default"); Session session = sessionFactory.getSharedSession(); UnitOfWork uow = session.acquireUnitOfWork(); SysUser usr2 = new SysUser();

当我通过UnitOfWork插入值时,Eclipslink和Derby Auto Icrement列之间似乎存在问题

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();
以下是生成的SQL Eclipselink:

INSERT INTO APP.SYS_USER (DB_ID, CREATED, STATUS, USER_NAME, USER_PASSWORD) VALUES (?, ?, ?, ?, ?)  bind => [0, null, null, testinsert, test]
INSERT INTO APP.SYS_USER (USER_NAME, USER_PASSWORD) VALUES ( ?, ?)  bind => [testinsert, test]
导致“尝试修改标识列“DB_ID.”异常

下面是我希望生成的SQL:

INSERT INTO APP.SYS_USER (DB_ID, CREATED, STATUS, USER_NAME, USER_PASSWORD) VALUES (?, ?, ?, ?, ?)  bind => [0, null, null, testinsert, test]
INSERT INTO APP.SYS_USER (USER_NAME, USER_PASSWORD) VALUES ( ?, ?)  bind => [testinsert, test]
我尝试了
插入SYS\u USER(用户名、用户名、密码)值('tesetinsert2','test')
,效果很好

是否有一个映射文件xml或其他东西可以解决这个问题,或者我可以配置Derby来跳过这些空值

编辑:以下是表格:

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" ) );
编辑:以下是实体的一部分:

@Table(name = "SYS_USER")
@Entity
public class SysUser implements Serializable {
  @Column(name = "DB_ID")
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Id
  private int dbId;
解决方案是使用“实体管理器”而不是“工作单元”。UnitOfWork似乎不支持Derby的自动增量列


我不会接受我自己的解决方案,因为它不是UnitOfWork的直接解决方案。可能有人也有同样的问题,我想知道这是UnitOfWork的BUG还是文档记录不好。

在Derby和生成的ID方面,使用EclipseLink本地API(UnitOfWork)应该与JPA的工作方式相同。确保在描述符中将字段声明为使用序列,并将平台设置为Derby并设置本机序列