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

当我试图调用saveorupdate()方法时,在hibernate中发生重复条目

伏业
2023-03-14

我的应用程序包含多个并发运行的线程,所有线程都插入或更新表中的多行,因此我使用saveOrUpdate()来避免重复条目问题。但这种情况发生过好几次。

我的表结构

CREATE TABLE `question` (`id` varchar(100) CHARACTER SET latin1 NOT NULL COMMENT 'It will be the post_id in )
<class name="com.xminds.bestfriend.frontend.model.Question" table="question" >
    <id name="id" type="string">
        <column name="id" length="100" />
        <generator class="assigned" />
    </id>
    <many-to-one name="users" class="com.xminds.bestfriend.frontend.model.Users" fetch="select">
        <column name="answer_uid" />
    </many-to-one>
    <many-to-one name="questionType" class="com.xminds.bestfriend.frontend.model.QuestionType" fetch="select">

        <column name="question_type_id" />
    </many-to-one>
    <property name="data1" type="string">
        <column name="data1" length="65535" />
    </property>
    <property name="data2" type="string">
        <column name="data2" length="65535" />
    </property>
    <property name="fbCreatedDate" type="timestamp">
        <column name="fb_created_date" length="19" />
    </property>
    <property name="permaLink" type="string">
        <column name="perma_link" length="1000" />
    </property>
    <property name="fbUpdatedDate" type="timestamp">
        <column name="fb_updated_date" length="19" />
    </property>
    <property name="contentActivity" type="java.lang.Integer">
        <column name="content_activity" />
    </property>
    <property name="nbConsumptions" type="int">
        <column name="nb_consumptions" not-null="true" />
    </property>
    <property name="createdDate" type="date">
        <column name="created_date" length="10" />
    </property>
    <property name="updatedDate" type="date">
        <column name="updated_date" length="10" />
    </property>
    <property name="cover_url" type="string">
      <column name="cover_url" length="1000"/>
    </property>

    <property name="category" type="string">
      <column name="category" length="1000"/>
    </property>
    <property name="width" type="int">
        <column name="width" not-null="true" />
    </property>
    <property name="height" type="int">
        <column name="height" not-null="true" />
    </property>
    <property name="coverOffsetX" type="java.lang.Integer">
        <column name="cover_offset_x" />
    </property>
    <property name="coverOffsetY" type="java.lang.Integer">
        <column name="cover_offset_y" />
    </property>
    <property name="latitude" type="java.lang.Double">
        <column name="latitude" precision="12" scale="0" />
    </property>
    <property name="longitude" type="java.lang.Double">
        <column name="longitude" precision="12" scale="0" />
    </property>
    <property name="is_active" type="boolean">
        <column name="is_active" not-null="true" />
    </property>
    <set name="questionConsumptions" inverse="true">
        <key>
            <column name="question_id" length="100" not-null="true">
                <comment>QuestionId</comment>
            </column>
        </key>
        <one-to-many class="com.xminds.bestfriend.frontend.model.QuestionConsumption" />
    </set>
</class>

正在获取异常

WARN  JDBCExceptionReporter - SQL Error: 1062, SQLState: 23000
@Override
public void saveOrUpdate(Object instance)
{

    //log.debug("attaching dirty  instance");
    try
    {
        getHibernateTemplate().saveOrUpdate(instance);
        //log.debug("attach successful");
    }
    catch (RuntimeException re)
    {
       // log.error("attach failed", re);
        throw re;
    }

}

共有1个答案

吕胤
2023-03-14

您说,“我的应用程序包含几个并发运行的线程,所有线程要么插入或更新表中的几行”。并且您正在手动设置ID。我想知道,你正在为你的线程设置的ID,你是如何获得它们的?

 类似资料:
  • Powermock为什么不模拟静态方法调用,而是在然后()语句中调用初始方法? 在这种情况下,我有一系列方法调用: TestClass方法-调用- Class4方法尝试查找上下文中不存在且挂起的对象,因此我尝试使用Powermock模拟公共静态Class3方法。 所有的类和方法都是非最终的。我使用TestNg。我的测试方法有一个@准备测试我尝试了以下方法来模拟方法调用: 或而不是当-然后返回: 或

  • 问题内容: 在JPA中,有什么方法可以复制Hibernate的saveOrUpdate行为, 它实质上检查数据库中是否已存在该对象,并根据需要更新该对象或保存该对象的新实例。 JPA无事务读取很不错,但是Hibernate确实缺少这种方法。有经验的JPA开发人员如何处理此问题? 问题答案: 尝试使用该方法-这非常相似。 Xebia的博客文章中对差异有一个很好的描述:“ JPA实施模式:保存(独立)

  • 假设aClassC是一个ClassC实例,运行以下行: 在此之后,将为ClassA、ClassB和ClassC运行三个update语句(这是预期的)。 我没有想到的是,一个表上的delete语句并不是这样存在的: 埃塞克斯男孩的回答帮我解决了问题。实体非常复杂,有人添加了一个我没有注意到的一对多关联的列表。我仍然不明白为什么在更新过程中需要一个delete语句,但我将暂且不提这个问题:)

  • 我用java编写Rational类来做基本的数学运算,我想覆盖Number类和Comparable接口的方法。我这样做是为了双倍的价值 正如我们所知,BigInteger类也扩展了数字类,所以我对在doubleValue中调用哪个方法感到困惑,因为我已经覆盖了doubleValue

  • 我在冬眠中面临一个奇怪的问题。在多线程环境中操作,当尝试插入到其中一个表中时,在表中获得重复的条目。只有主键不同,其余所有其他字段都是完全重复的。 使用Hibernate+Oracle和使用Spring-HibernateTemplate对象。 下面是我的BO类的相关部分,以及下面给出的保存对象的代码。不使用任何瞬态场。 我已经检查了与此相关的其他帖子,但没有一篇针对问题的根本原因。我不想在db表

  • 问题检测到端口3306M被C程序文件使用(x86)MySQL MySQL Server 5.0ibinimysqld如果没有配置的空闲端口,MySQL将无法启动! 您需要卸载/禁用/重新配置阻塞应用程序 或重新配置MySQL和控制面板以侦听不同的端口