Liferay неправильный автоинкремент - PullRequest
0 голосов
/ 21 января 2019

У меня Liferay 6.2.

У меня есть портлет, который использует базу данных MySql.

У меня есть стол человек :

Id | Name | Info

Id - автоинкремент, поэтому в service.xml у меня есть:

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

У меня есть машина для разработки. У меня уже есть 100 строк в таблице MySQL лиц . Я ввел информацию в таблицу лиц с помощью SQL-запроса и использовал id , начиная с 300 до 600. Я использовал бэкэнд-инструмент Liferay для обновления кэша базы данных. Когда я ввожу новую строку с приложением (портлетом), идентификатор равен 601. Это правильно.

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

Когда я вставляю новую строку, с портлетом id равен 101, а не 601.

Когда я приду к ** id ** 199, что произойдет, когда я вставлю новую строку?

Что я могу сделать, чтобы решить проблему?

1 Ответ

0 голосов
/ 21 января 2019

Учитывая, что вы видите идентификаторы «сотни», вы можете просто увидеть значение приращения по умолчанию для сущностей Liferay:

Из portal.properties :

# Set the number of increments between database updates to the Counter table. 
# this value to a higher number for better performance.
# Defaults:

 counter.increment=100

Вы можете проверить это поведение, создав 101 объект (где объект # 101 вы получите 700 в качестве идентификатора) или отключив сервер, который вы использовали для создания объекта # 101, и перезапустите его, затем создайте новый объект. : Детализация 100 будет означать, что будут выделены следующие 100 идентификаторов, а затем будет выбрана # 700.

Когда я приду к ** id ** 199, что произойдет, когда я вставлю новую строку?

Это легко узнать ...

Что я могу сделать, чтобы решить проблему?

Подтвердите , что есть проблема. Там может быть не нужно ничего решать

У меня есть машина для разработки. У меня уже есть 100 строк в таблицах людей mysql. Я ввел информацию в таблицу people с помощью SQL-запроса и использовал идентификатор от 300 до 600

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

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

Вы не должны никогда изменять любые сущности Liferay в базе данных напрямую. Если у вас есть свои собственные сущности, созданные сервис-билдером, у вас может быть смысл, но я бы порекомендовал выбрать один метод записи / доступа к данным и придерживаться его.

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