如何更新EclipseLink用于@TableGenerator的行或在该表中插入新行?

时间:2014-12-18 15:12:49

标签: jpa jdbc eclipselink

我想将基于JDBC的应用程序集成到在GlassFish中运行的Java EE应用程序中,该应用程序将EclipseLink JPA 2.5与MariaDB(MySQL克隆)一起使用。

基于JDBC的应用程序将平面文件中的数据导入到某些数据库表中,并且需要通过执行以下命令来更新主键的下一个序列值:

UPDATE dbtable SET nextid = 4711 WHERE name = 'table4Import';

使用标准JDBC连接。此语句抛出SQL超时异常,因为该行已被锁定。它似乎被EclipseLink锁定,它为表生成器使用相同的表。这是包含序列值的表的(部分):

CREATE TABLE dbtable (
  dbtid bigint not null primary key,
  dbtname varchar ( 50 ) not null,
  dbtnextid bigint );

这是其中一个JPA实体的代码:

@Entity
@Access(AccessType.PROPERTY)
@Table( name = "table4Import" )
public class Table4ImportClass {

  private Long id = null;

  @NotNull
  @Id
  @TableGenerator( name="table4Import", allocationSize=1,
    table="dbtable", pkColumnName="dbtname",
    pkColumnValue="table4Import", valueColumnName="nextid" )
  @GeneratedValue( generator="table4Import", strategy=GenerationType.TABLE )
  public Long getId() { return this.id; }
  ...

附录:甚至无法在该表中插入新行。 EclipseLink似乎锁定了整个表。仍然可以从另一个程序修改表(插入和更新)。锁定范围似乎是运行EclipseLink的JVM。

附录2:将此错误添加到EclipseLink错误跟踪器455756

0 个答案:

没有答案