【问题标题】:hibernate with java.sql.BatchUpdateException使用 java.sql.BatchUpdateException 休眠
【发布时间】:2012-04-02 09:02:34
【问题描述】:

我正在使用 hibernate 将我们的类映射到 oracle 中的表。 我的班级有一个主键作为 id ,由休眠自动生成

 <id name="jobId" type="long">
        <column name="JOBID" />
        <generator class="increment" />
    </id>

在我的代码中:

Job job = new Job();
do some config for the job.
saveOrUpdate(job);

在这个 saveOrUpdate 中我遇到了:

org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
at com.myCompany.BasicDaoImpl.saveOrUpdate(BasicDaoImpl.java:37)
at com.myCompany.JobRoutine.generateJob(JobRoutine.java:142)
Caused by: java.sql.BatchUpdateException: ORA-00001: unique constraint (DBGROUP.SYS_C0011345) violated

at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10700)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 13 more

我发现约束是 priamry_key。 这个错误总是不愉快,但有时。

谁能给我一些建议?

非常感谢!

【问题讨论】:

    标签: database oracle hibernate exception


    【解决方案1】:

    The documentation 说:

    递增

    生成 long、short 或 int 类型的标识符,这些标识符仅在没有其他进程将数据插入同一个表时才是唯一的。做 不能在集群中使用。

    您可能有另一个进程在同一个表中插入行,而 Hibernate 并没有意识到这一点,因为增量生成器只是将下一个值存储在内存中,并假定它是唯一一个在该表中插入行的进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2011-02-25
      • 2013-07-01
      • 2014-09-27
      • 2014-11-30
      • 2013-04-13
      • 2023-03-16
      相关资源
      最近更新 更多