спящий с java.sql.BatchUpdateException - PullRequest
0 голосов
/ 16 марта 2012

Я использую hibernate для отображения наших классов на таблицы в oracle.Мой класс имеет первичный ключ как идентификатор, автоматически генерируется hibernate

 <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.Эта ошибка не всегда радует, но иногда.

Может ли кто-нибудь дать мне несколько советов по этому поводу?

Большое спасибо!

1 Ответ

4 голосов
/ 17 марта 2012

В документации написано:

прибавка

генерирует идентификаторы типа long, short или int, которые являются уникальными только тогда, когда никакой другой процесс не вставляет данные в ту же таблицу. Делать не использовать в кластере.

Возможно, у вас есть другой процесс, вставляющий строки в ту же таблицу, и Hibernate не знает об этом, потому что генератор приращений просто хранит следующее значение в памяти и предполагает, что он является единственным для вставки строк в эту таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...