Удалить все записи с помощью 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
):
- У вас есть прямой доступ к компоненту персистентности, поэтому нет необходимости использовать
LocationUtil
, - Принятый ответ предлагает поймать любого
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
в вашем контроллере. Это избавит вас от необходимости перестраивать уровень сервиса.