liferay единая база данных для двух приложений - PullRequest
0 голосов
/ 30 мая 2018

У меня есть база данных, которая является общей для двух приложений, одно из которых работает на Liferay, а другое - при весенней загрузке.Я вставляю значение в одну из таблиц ( с первичным ключом, установленным как автоинкремент ) из обоих приложений.

У меня в диспетчере служб есть следующее

<entity name="EntityName" local-service="true" remote-service="false" cache-enabled="false">
<column name="coloumnName" type="long" primary="true" id-type="increment" />

Теперь приложение выдает ошибку Duplicate primary key при попытке вставить значение в таблицу.У кого-нибудь есть решение для этого?

1 Ответ

0 голосов
/ 30 мая 2018

id-type="increment" действительно используется для полей с автоинкрементом.Из инструкций по использованию в очень хорошо документированном сервис-построителе DTD : (выделено мной)

Значения id-type и id-param используются для создания автоматическогоавтоматически генерируемый первичный ключ при вставке записей в таблицу.Это может быть реализовано 4 различными способами, в зависимости от типа используемой базы данных. Во всех случаях первичному ключу объекта модели должно быть присвоено значение null , и Hibernate будет знать, что заменить нулевое значение автоматически сгенерированным, автоматически увеличивающимся значением.Если значение типа id не используется, предполагается, что первичный ключ будет назначен, а не сгенерирован автоматически.

Если вы будете следовать любому другому примеру кода, который вручную устанавливает первичный ключ перед вставкойновый объект в базу данных, это значение будет выбрано для идентификатора.Поскольку вам придется реализовать некоторые части связующего кода с помощью Service Builder, есть большая вероятность, что вы уже где-то задали первичный ключ.

Если вы передадите null в качестве ключа, вы получите значение автоинкремента обратно после вставки.

...