在liferay中删除多行

问题描述 投票:1回答:2

我有一个名为xyz的表,其中包含各种记录

enter image description here

service.xml具有以下提到的条目

<entity name="xyz" local-service="true" remote-service="true" cache-enabled="true" json-enabled="true">
        <column name="sno" type="int" primary="true" id-type="identity"></column>
        <column name="name" type="String"></column>
        <column name="address" type="String"></column>
        <column name="userid" type="int"></column>

        <finder return-type="Collection" name="userid">
            <finder-column name="userid"></finder-column>
        </finder>
    </entity>

现在我想删除所有拥有userid 10的用户

使用服务构建器,我们可以执行以下操作

List<xyz> xyzList = XyzLocalServiceUtil.findbyuserid(10);
if(xyzList!=null && !xyzList.isEmpty()){
    for (xyz xy : xyzList) {
      xyzListLocalServiceUtil.deleteXyz(xy.getSno());
    }
}

但是我想通过执行下面提到的查询来一次性删除所有行

delete from xyz where userid =10;

什么是liferay服务建设者相当于此?

我正在使用liferay-6.2-ce-ga3

liferay liferay-6 liferay-service-builder
2个回答
2
投票

在service.xml中声明查找程序时,服务构建器过程还会基于同一查找程序生成删除方法。

搜索,你会发现一个方法为XyzPersistence.deletebyuserid()

您可以在XyzLocalServiceImpl中构建一个新方法来在持久层ant service-builder中调用delete,并且您将在localservice层中进行大量删除。


0
投票

无法通过查询批量删除(据我所知)。原因是liferay通常具有(允许)一些钩子来移除实体回调。还有一些finder-cache可能无法正确跟踪那些批量删除。您应该在* ServiceImpl中实现自定义批量删除方法,该方法在一个事务中处理那些批量删除(迭代删除)。

© www.soinside.com 2019 - 2024. All rights reserved.