问题描述
我正在使用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 (将#修改为@)