当前位置: 首页 > 知识库问答 >
问题:

Hibernate中有重复条目

凤衡
2023-03-14

我在冬眠中面临一个奇怪的问题。在多线程环境中操作,当尝试插入到其中一个表中时,在表中获得重复的条目。只有主键不同,其余所有其他字段都是完全重复的。

使用Hibernate+Oracle和使用Spring-HibernateTemplate对象。

下面是我的BO类的相关部分,以及下面给出的保存对象的代码。不使用任何瞬态场。

我已经检查了与此相关的其他帖子,但没有一篇针对问题的根本原因。我不想在db表上引入任何约束/唯一索引。

@Entity
@Table(name="ADIRECIPIENTINTERACTION")
@Lazy(value = true)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@GenericGenerator(name="recipientInteractionSeq", strategy = "native", parameters = 
{ @Parameter(name="sequence", value="SEQiRecipientInteractId")})
public class RecipientInteractionBO extends BusinessObject{ 
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(generator = "recipientInteractionSeq", strategy = GenerationType.AUTO)
    @Column(name="IRECIPIENTINTERACTIONID")     
    private long lId; ....

这是用来保存BO的代码。

-----------------------------------------------------
RecipientInteractionBO recInt = (RecipientInteractionBO) objectPS
                    .getUniqueResult(detachedCriteria);
if (recInt == null) {
 recInt = new RecipientInteractionBO();
 ....
 hibernateTemplateObj.insertObject(recInt);
} else {
  ...
   hibernateTemplateObj.saveOrUpdate(recInt);
}

共有1个答案

齐阎宝
2023-03-14

检查您的数据持久性代码,以了解多线程可能存在的竞争条件。您正在检查是否存在RecipientInteractionBO,它可能正在从数据库查询。如果两个线程同时运行,两个线程都检查它是否存在,因为对于两个线程都不存在,两个线程都保持新实体。您可能需要使用同步来使检查和插入/更新过程一次只对一个线程执行。

 类似资料:
  • 我的数据库中有这些(简化的)表 我已经用这两个(简化的)类映射了表 公司 如果我注释第26、28、30和32行(上面标记的),同样的代码可以完美地工作。但我想知道为什么会产生异常。为什么是复制的钥匙? 提前谢了。

  • 问题内容: 我有一个由以下映射的关联: 我想使用Criteria API返回所有包含一个或多个带有attribute实体的实体的列表。我不希望映射集合被查询过滤。 例如,给出以下内容: 该查询应返回以下内容: 到目前为止,我正在使用以下条件查询: 然而,它返回的等价于 即,它为每个子元素返回一个父记录(填充了子集合) 有谁知道在这种情况下如何仅返回唯一的父元素? 意见表示赞赏,p。 问题答案: 您

  • 我添加了以下代码以将记录插入/更新到表中 如果数据存在,它将更新表,否则将插入一个新记录,在我的情况下,数据已经存在,所以我首先更新记录,如果循环工作,但我得到 org.springframework.dao.DataIntegrityViolationException: key'umul_facebook_id_UNIQUE'的重复条目'482186425258498';SQL[n/a];约束

  • 我有一个类,它将用一个数组中预先生成的所有员工填写一个列表。我可以用员工填充ArrayList,但唯一的问题是,我得到了一些“重复”条目,我使用引号是因为它们不完全相同,但它们可以共享相同的姓名或员工编号,但可能不具有相同的雇用年份或薪资等。 员工类别如下: 下面是将填充列表的generateList方法: “generateProductionWorker()和shiftSupervisor方法

  • 我对冬眠很陌生。我正试图用hibernate制作我的第一个应用程序,结果遇到了下一个例外: NoClassDeffounderRror:javax/xml/bind/jaxbexception在org.hibernate.boot.cfgxml.internal.configloader$1。initialize(configloader.java:41)在org.hibernate.boot.c