Java 当我试图调用saveorupdate()方法时,在hibernate中发生重复条目
我的应用程序包含几个并发运行的线程,所有线程都会插入或更新表中的几行,因此我使用saveOrUpdate()来避免重复条目问题。但这种情况发生了好几次 我的桌子结构Java 当我试图调用saveorupdate()方法时,在hibernate中发生重复条目,java,spring,hibernate,Java,Spring,Hibernate,我的应用程序包含几个并发运行的线程,所有线程都会插入或更新表中的几行,因此我使用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.m
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>
错误JDBCExceptionReporter-键“PRIMARY”的重复条目“1019306207_10200395396740374”
错误AbstractFlushingEventListener-无法将数据库状态与会话同步
org.hibernate.exception.ConstraintViolationException:无法插入:[com.xminds.bestfriend.frontend.model.Question]
位于org.hibernate.exception.sqlstatecoverter.convert(sqlstatecoverter.java:96)
位于org.hibernate.exception.jdbceptionhelper.convert(jdbceptionhelper.java:66)
位于org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2436)
位于org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2856)
位于org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
位于org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
位于org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
位于org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
位于org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
位于org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
位于org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
位于org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
位于org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
位于org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656)
位于org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
位于org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
位于org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:147)
在com.xminds.bestfriend.consumers.Base.onMessage上(Base.java:89)
位于org.springframework.jms.listener.adapter.MessageListenerAdapter.onMessage(MessageListenerAdapter.java:339)
位于org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:535)
位于org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:495)
位于org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467)
位于org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:325)
位于org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263)
位于org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058)
位于org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050)
位于org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)
运行(Thread.java:679)
原因:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:键“PRIMARY”的重复条目“1019306207_10200395396740374”
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:532)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:411)
位于com.mysql.jdbc.Util.getInstance(Util.java:386)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1039)
在com.mysql.jdbc.MysqlIO.checkErrorPacket上(MysqlIO.java:3597)
在com.mysql.jdbc.MysqlIO.checkErrorPacket上(MysqlIO.java:3529)
在com.mysql.jdbc.MysqlIO.sendCommand上(MysqlIO.java:1990)
位于com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)
位于com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2625)
位于com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
位于com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2415)
位于com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2333)
位于com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2318)
在com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
位于org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:46)
位于org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2416)
... 25多
生成问题时出错-无法处理任务ID:208
org.springframework.dao.DataIntegrityViolationException:无法插入:[com.xminds.bestfriend.frontend.model.Question];SQL[在问题中插入(答案uid、问题类型id、数据1、数据2、创建日期、永久链接、更新日期、内容活动、nb消耗、创建日期、更新日期、覆盖url、类别、宽度、高度、覆盖偏移量x、覆盖偏移量y、纬度、经度、是否活动、id)值(、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、)];约束[null];嵌套异常为org.hibernate.exception.ConstraintViolationException:无法插入:[com.xmin]
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;
}
}