Удалить запись о значении отдельного поля в Liferay Service Builder
Я хочу удалить конкретную запись, используя имя поля
Таблица: Пустышка
- Идентификатор поля
Имя поля
public void deleteLocation(req, res){ String getLocationName = request.getParameter("locationName"); Location locationToDelete = new LocationImpl(); locationToDelete.setLocationName(getLocationName); LocationLocalServiceUtil.deleteLocation(locationToDelete); }
Это не показывает мне никакой ошибки, но запись не удаляется. Пожалуйста, помогите мне.
2 ответа
Самый простой способ добиться этого - добавить <finder>
узел для этого конкретного поля в service.xml
как следует Location
это имя вашей сущности, name
Ваше имя поля и Name
это имя записи поиска в service.xml
) и построить сервис:
<column name="name" type="String" />
<finder name="Name" return-type="Collection">
<finder-column name="name" />
</finder>
При успешной сборке он будет создавать операции CRUD в вашем сервисе на основе этого столбца. Теперь вы можете найти следующие методы в вашем LocationUtil.java
:
findByName,
removeByName,
countByName,
Создать следующий (новый) метод в LocationLocalServiceImpl.java
:
public void deleteLocationsByName(String name){
try{
LocationUtil.removeByName(name);
}catch(Exception ex){
// log your exception
}
}
Опять же, при построении службы этот метод будет доступен для использования в вашем классе действий из LocationLocalServiceUtil.java
где вы можете назвать это как:
public void deleteLocation(req, res){
String locationName = request.getParameter("locationName");
LocationLocalServiceUtil.deleteLocationsByName(locationName);
}
Вот и все, вы добавили пользовательский метод поиска в ваш сервис.
Если вы хотите удалить элемент по id, вы можете сделать это с помощью "LocalServiceUtil.delete(id)". Если вы хотите удалить элементы по полю, отличному от id, вам нужно сделать собственный запрос для этого, вы можете выполнить поиск в портале soruce для файла: portal.xml, содержащего этот пример:
<sql id="com.liferay.portal.service.impl.ResourceBlockLocalServiceImpl.deleteResourceBlock">
<![CDATA[
DELETE FROM
ResourceBlock
WHERE
(referenceCount <= 0) AND
(resourceBlockId = ?)
]]>
</sql>
Здесь вы можете увидеть, как реализовать пользовательский запрос:
https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-2/developing-custom-sql-queries