gpt4 book ai didi

java - Hibernate 中的重复条目

转载 作者:行者123 更新时间:2023-12-01 13:49:59 25 4
gpt4 key购买 nike

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

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

这是我的 BO 类的相关部分以及下面给出的用于保存对象的代码。不使用任何 transient 字段。

已检查与此相关的其他帖子,但没有一个帖子解决了问题的根本原因。我不想在数据库表上引入任何约束/唯一索引。

@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);
}

如果需要任何其他详细信息,请告诉我。

最佳答案

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

关于java - Hibernate 中的重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20040451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com