我有一个名为xyz的表,其中包含各种记录
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
在service.xml中声明查找程序时,服务构建器过程还会基于同一查找程序生成删除方法。
搜索,你会发现一个方法为XyzPersistence.deletebyuserid()
您可以在XyzLocalServiceImpl中构建一个新方法来在持久层ant service-builder
中调用delete,并且您将在localservice层中进行大量删除。
无法通过查询批量删除(据我所知)。原因是liferay通常具有(允许)一些钩子来移除实体回调。还有一些finder-cache可能无法正确跟踪那些批量删除。您应该在* ServiceImpl中实现自定义批量删除方法,该方法在一个事务中处理那些批量删除(迭代删除)。