我想将基于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
中