Удалить все записи с помощью Liferay Service Builder

Я могу удалить конкретную запись с помощью Liferay Service Builder, но что делать, если я хочу удалить все записи из этой таблицы.

Я новичок в Liferay Так что любая помощь будет оценена...!!!

2 ответа

Решение

Как называется ваша сущность Location, добавьте следующий метод в ваш LocationLocalServiceImpl.java и построить сервис:

public void deleteAllLocations(){
    try{
        LocationUtil.removeAll();
    }catch(Exception ex){
        // Log exception here.
    }
}

На успешной сборке, deleteAllLocations будет скопирован в LocationLocalServiceUtil.java откуда вы можете использовать его в своем классе действий как:

LocationLocalServiceUtil.deleteAllLocations();

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

  1. У вас есть прямой доступ к компоненту персистентности, поэтому нет необходимости использовать LocationUtil,
  2. Принятый ответ предлагает поймать любого Exception и ведение журнала. Я не согласен с этим, потому что он молча провалится и в зависимости от логики приложения может вызвать проблемы в дальнейшем. Например, если ваш removeAll вызывается внутри транзакции, успех которой зависит от правильного удаления всех сущностей, и принятый подход не выполняется, транзакция не будет откатана, так как вы не выбрасываете SystemException,

Имея это в виду, учтите следующее (в рамках вашей реализации, как указано выше):

public void deleteAllLocations() throws SystemException {
    locationPersistence.removeAll();
}

Затем, откуда бы вы ни вызывали его (например, в контроллере), вы можете контролировать, что происходит в случае сбоя

try {
    LocationLocalServiceUtil.removeAllLocations();
} catch (SystemException e) {
    // here whatever you've removed has been rolled back
    // instead of just logging it, warn the user that an error occurred
    SessionErrors.add(portletRequest, "your-error-key");
    log.error("An error occurred while removing all locations", e);
}

Сказав это, ваш LocationUtil класс доступен за пределами сервиса, поэтому вы можете вызывать его из контроллера. Если ваша цель только удалить все Location сущности, не делая ничего другого в контексте этой транзакции, вы можете просто использовать LocationUtil в вашем контроллере. Это избавит вас от необходимости перестраивать уровень сервиса.

Другие вопросы по тегам