Не удается сохранить объект данных, ошибка при совершении транзакции

Мне удалось написать расширение для развертывания и расширение хранилища.

А ниже приведены журналы, которые я взял из журналов ядра, которые показывают, что все загружено отлично!

2013-01-08 11:30:19,759 INFO  BundleConfigurationLoader - Added 'PublishAction' for storage 'persistence' with 'com.tridion.storage.dao.JPAPublishActionDAO'.

2013-01-08 11:30:38,259 DEBUG JPAPublishActionDAO - Constructor of JPAPublishActionDAO- storageId:searchdb
2013-01-08 11:30:38,259 DEBUG JPAPublishActionDAO - Constructor of JPAPublishActionDAO- entityManagerFactory:true
2013-01-08 11:30:38,259 DEBUG JPAPublishActionDAO - Constructor of JPAPublishActionDAO- storageName:PublishAction

2013-01-08 11:19:38,400 INFO  Module - No TransformProcessor configured, will not transform files before deployment for module com.tridion.custom.extensions.SearchPageDeployer
2013-01-08 11:30:38,400 DEBUG SearchPageDeployer - Constructor of SearchPageDeployer //This is my PageDeployer Constructor


2013-01-08 11:30:38,744 DEBUG SearchPageDeployer - Called processPage from SearchPageDeployer //This is my process Page of pagedeployer class

2013-01-08 11:30:38,572 DEBUG SearchPageDeployer - SearchPageDeployer Called processItem
2013-01-08 11:30:38,572 DEBUG StorageManagerFactory - Default storage provider has caching set to: false
2013-01-08 11:30:38,572 DEBUG StorageManagerFactory - Loaded following dao Properties[publication=0, typeMapping=PublishAction, storageId=searchdb, cached=false] for publication/typeMapping/itemExtension: 0 / PublishAction / null
2013-01-08 11:30:38,572 DEBUG StorageManagerFactory - Loading a non cached DAO for publicationId/typeMapping/itemExtension: 0 / PublishAction / null
2013-01-08 11:30:38,572 DEBUG StorageManagerFactory - Wrapping DAO's, currently 0 wrappers installed
2013-01-08 11:30:38,572 INFO  JPAPublishActionDAO - Entering Method: JPAPublishActionDAO.PublishAction.store
2013-01-08 11:40:33,228 ERROR SearchPageDeployer - SearchPageDeployer - Exception occurred com.tridion.broker.StorageException: Unable to persist data entity, Error while commiting the transaction, Error while commiting the transaction

Теперь, когда я пытаюсь сохранить данные в своей таблице, я получаю сообщение: "Возникла исключительная ситуация com.tridion.broker.StorageException: невозможно сохранить объект данных, ошибка при совершении транзакции, ошибка при совершении транзакции"

это какая-то проблема с моим классом Entity или что-то, чего мне не хватает.

РЕДАКТИРОВАТЬ: После включения уровня ведения журнала "ON" в logback XML.

Я получил ниже исключения в основных файлах:

2013-01-08 14:42:10,713 DEBUG SQL - insert into AUTN_ITEMS (ACTION, FLAG, ITEM_TYPE, LAST_PUBLISHED_DATE, PUBLICATION_ID, SCHEMA_ID, TCMURI, URL, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
2013-01-08 14:42:10,728 DEBUG AbstractBatcher - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
2013-01-08 14:42:10,744 DEBUG JDBCExceptionReporter - could not insert: [com.tridion.storage.dao.PublishAction] [insert into AUTN_ITEMS (ACTION, FLAG, ITEM_TYPE, LAST_PUBLISHED_DATE, PUBLICATION_ID, SCHEMA_ID, TCMURI, URL, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?)]
com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert explicit value for identity column in table 'AUTN_ITEMS' when IDENTITY_INSERT is set to OFF.

Спасибо

3 ответа

Решение

Появляющаяся ошибка говорит о том, что ваш столбец идентификатора неправильно определен как идентификатор или вы пытаетесь вручную установить значение для автоматически сгенерированного значения в этом столбце. Надеюсь это поможет.

С уважением, Даниэль.

Выше проблема была в моем классе сущностей, мне нужно добавить аннотации ниже для моей колонки идентификации.

@Id
@Column(name = "ID", unique=true,updatable=false,insertable=false)
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;

Пожалуйста, предложите, если какие-либо изменения необходимы.

Спасибо

Столбец ID должен быть установлен на автоинкремент на уровне дБ. Взгляните на мою оригинальную статью о sdltridionworld для примера http://www.sdltridionworld.com/articles/sdltridion2011/tutorials/extending-content-delivery-storage-sdltridion-2011-1.aspx

"Для SQL Server идентификатор столбца определяется как IDENTITY(1,1), поэтому он автоматически увеличивается на единицу без указания значения.

Для Oracle идентификатор столбца должен быть определен с использованием последовательности (которая генерирует значения), например: CREATE SEQUENCE SEQ_PUBLISH_ACTIONS MAXVALUE 999999999999999 ЗАПУСК ЦИКЛА С 1 / СОЗДАТЬ ИЛИ ЗАМЕНИТЬ TRIGGER PUBLISH_ACTIONS_KEY ПЕРЕД ВСТАВИТЬ НА PEGLISH: PUBLISH_ACTIONS_BEY НЕДОСТУПНО, ПОТОМ ВЫБРАТЬ SEQ_PUBLISH_ACTIONS.NEXTVAL INTO:new.ID FRU DUAL;   END IF; КОНЕЦ; / "