Liferay: Как настроить Service Builder для использования сгенерированного MySQL первичного ключа

У меня есть объект Liferay (таблица журнала), первичный ключ которого автоматически сгенерирован Liferay Service Builder (service.xml). Однако теперь внешнему приложению необходимо добавить записи в эту же таблицу базы данных.

Глядя на это требование, я вижу только два варианта его достижения:

  1. Если я могу указать в файле service.xml, который может разрешить этому объекту базы данных использовать сгенерированный MySQL первичный ключ (а не сервисы счетчиков Liferay), то Liferay или внешнее приложение могут добавлять записи без каких-либо проблем.
  2. Если № 1 невозможен из-за ограничений Service Builder, то единственным вариантом является предоставление этого объекта с помощью веб-службы liferay для внешнего приложения для добавления записей в эту таблицу базы данных.

person msa    schedule 14.10.2015    source источник


Ответы (2)


Построитель службы DTD 6.2.0

Ответ на ваш вопрос находится непосредственно в описании xml-документа.

Первый пример

Вторая реализация генерирует идентификаторы, которые уникальны только тогда, когда никакой другой процесс не вставляет данные в ту же таблицу. Эту реализацию НЕ следует использовать в кластерной среде, но она работает для всех поддерживаемых баз данных.

Пример

<column
    name="id"
    type="Integer"
    primary="true"
    id-type="increment"
/>

Второй пример

Третья реализация использует столбец идентификаторов для создания первичного ключа. В этой реализации SQL-код создания таблицы, сгенерированный для этой сущности, создаст столбец идентификаторов, который изначально автоматически генерирует первичный ключ всякий раз, когда происходит вставка. Эта реализация поддерживается только DB2, MySQL и MS SQL Server.

Пример

<column
    name="id"
    type="Integer"
    primary="true"
    id-type="identity"
/>

Трудно найти информацию о том, как переопределить метод create в сгенерированном вами классе persistenceImpl. Когда вы создаете суррогатный ключ в Liferay, вы обычно используете CounterLocalService для увеличения. Однако, когда ваш ключ обрабатывается базой данных, вам нужно отправить 0 в качестве аргумента.

public SoftwareKey createSoftwareKey() {
    return softwareKeyPersistence.create(0);
}
person Chris Maggiulli    schedule 09.06.2017

Ваше первое замечание: это не очень хорошая идея, первичные ключи будут полностью управляться Liferay.

Однако ваш второй пункт - это правильный способ добиться того, чего вы хотите, взгляните на здесь.

person Marco Mercuri    schedule 15.10.2015
comment
Нет, они будут управляться базой данных. - person tak3shi; 25.03.2021