切换@GeneratedValuestrategy = GenerationType.SEQUENCE

问题描述

我正在使用OpenJPA,但是我的应用程序仅使用原始sql样式(传统和性能原因,是的) 我们有一个表,比如说ZIP,它有复合主键-(ZIP_ID,LINK_ID),其中ZIP_CODE

直到上个发行版,我们都拥有这样的Zip.java

@Entity
@Table(/* replaceregexp: removed "schema=...," */name = Zip.TABLE_NAME)
@IdClass(com.xxx.yyyy.zzz.jpa.ZipId.class)
public class Zip implements ZipIface {
  @Id
  @Column(name = "ZIP_ID",length = 18)
  private Long zipId;

  @Id
  @Column(name = "LINK_ID",length = 10)
  private Long linkId;

其中ZipId类计算出与ZIP_CODE相关的唯一字段

但是在增加了用于创建ZIP表的数据后,我们会出错

尝试分配ID“ com.xxx.yyy.zzz.jpa.Zip-2133550035008 :: 590503870” 到新实例“ com.xxx.yyy.zzz.jpa.LdmZip7Ext@16d2b586”失败;已经有 具有此ID的L1缓存中的对象。您必须删除该对象(在上一个事务中 或当前版本),然后重新使用其ID。当水平放置时也会发生此错误 或垂直映射的类使用自动递增的应用程序标识,而不使用 应用程序标识类的层次结构。”

我检查ZipId.class并发现有很多冲突,因此决定用一栏主键(ZIP_ID)替换复合(ZIP_ID,LINK_ID)主键

@Entity
@Table(/* replaceregexp: removed "schema=...," */name = Zip.TABLE_NAME)
public class Zip implements ZipIface {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE)
  @Column(name = "ZIP_ID",length = 18)
  private Long zipId;

  @Basic
  @Column(name = "LINK_ID",length = 10)
  private Long linkId;

但是此后,应用程序的运行时间从5小时增加到60小时。 也许有人可以给我建议,在这种情况下应该使用哪种策略,或者应该使用完全不同的方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...