有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Hibernate中的java重复条目

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

使用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) 个答案

  1. # 1 楼答案

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