Как получить тип Text вместо типа String в сервисе liferay

Скажем, у вас есть такой объект в вашем service.xml

<entity name="Answer" local-service="true" remote-service="true">
    <!-- PK fields -->
    <column name="answer_id" type="long" primary="true" />
    <!-- Other fields -->
    <column name="user_id" type="long" />
    <column name="answer" type="String" />
    <column name="date_answered" type="Date" />
</entity>

Насколько я понимаю, глядя на такие сообщения, как это и this заключается в том, что с помощью Liferay 6 Service Builder вы можете указать только тип String, но не Text. Если вы хотите использовать текстовый тип, вам нужно вручную изменить сгенерированный сценарий SQL. Кажется, вы также можете отредактировать файл portlet-model-hints.xml, например

<field name="answer" type="String">
    <hint name="max-length">5000</hint>
</field>

в этом случае тип поля будет установлен на «ТЕКСТ» в сгенерированном файле SQL.

Но что, если вам нужно обновить поле «ответ» из строки в текстовое поле, когда таблицы уже созданы по первой схеме?

Спасибо за ваши ответы


person Nekosan    schedule 16.05.2012    source источник


Ответы (2)


В идеале он должен автоматически изменять таблицу базы данных, когда вы вносите некоторые изменения в service.xml.

1) Попробуйте отменить развертывание портлета 2) Очистите рабочую и временную папки 3) Перезапустите сервер 4) а затем повторно разверните портлет

Примечание. Правильнее обновить файл portlet-model-hints.xml, а не файл sql.

Надеюсь, поможет.

person Prakash K    schedule 17.05.2012
comment
Спасибо, все это я уже сделал (привыкаю к ​​этому процессу!), но почему-то не обновляет базу. Может быть, это потому, что он уже содержит данные? Это странно, поскольку я думал, что увеличение номера сборки в файле service.properties (то есть после запуска ant build-service) вызовет обновление схемы... но нет. Спасибо, в любом случае ! - person Nekosan; 18.05.2012
comment
Даже если он содержит данные, он запускает обновление таблицы, удивляйтесь, почему этого не происходит с вами. Вы можете попробовать добавить еще один столбец в service.xml и посмотреть, работает ли он? или изменить имя вашего столбца, чтобы увидеть, работает ли он? Чтобы вы могли быть уверены, что он вообще не обновляется или просто не меняет емкость столбца, в котором есть данные. - person Prakash K; 18.05.2012
comment
Спасибо Пракаш. Он не обновлял БД, хотя файлы service.properties и table.sql были обновлены. - person Nekosan; 18.05.2012

В этом случае удалите все записи из table.sql и после обновления поля перестройте свой сервис.

person Vipin Bardia    schedule 16.05.2012
comment
Хорошо, таблицы.sql обновляются, но когда я развертываю портлет, схема БД не изменяется. Нужно ли мне сбрасывать таблицы или есть более изящный способ? - person Nekosan; 16.05.2012
comment
В этом случае сначала попробуйте перезапустить сервер, и если это не сработает, удалите таблицы. - person Vipin Bardia; 16.05.2012
comment
Кажется, что просто перезапустить сервер не работает. Я нахожу довольно агрессивным просто бросать столы... Спасибо в любом случае - person Nekosan; 16.05.2012