我有一个名为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>
现在我要删除所有具有用户ID 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 Service Builder相当于什么?
我正在使用liferay-6.2-ce-ga3
答案 0 :(得分:2)
在service.xml中声明查找程序时,服务构建器过程还将基于同一查找程序生成delete方法。
搜索,您将找到一个XyzPersistence.deletebyuserid()方法
您可以在XyzLocalServiceImpl中构建一个新方法来调用持久性层中的删除ant service-builder
,然后在localservice层中进行大规模删除。
答案 1 :(得分:0)
通过查询批量删除是不可能的(据我所知)。原因是liferay通常具有(允许)用于删除实体回调的钩子。另外,其中包含一些查找器缓存,可能无法正确跟踪这些批量删除。 您应该在* ServiceImpl中实现一个自定义的批量删除方法,该方法可以处理一次交易中的那些批量删除(迭代删除)。