Удалить запись о значении отдельного поля в 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

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