我要求我需要使用liferay服务构建器实现onDelete Cascade功能。我如何在liferay中实现这一目标?
答案 0 :(得分:3)
首先:
onDelete Cascade不是Liferay Service Builder功能。它是您的数据库提供的功能。
下一步: Liferay的前提是,所有数据处理和评估都应该在代码中完成,而不是在数据库中完成。
说完了:
与onDelete Cascade类似的东西是实现模型侦听器。 ModelListener正在侦听模型的更改。 (我知道,误导名称;))在这个模型监听器中,你将实现onAfterRemove。在onAfterRemove中输入您的代码以删除相关记录。
这是我写的一个小样本。代码正在侦听组对象的更改,并尝试删除引用的ObjectGeodata对象(如果存在)。
package de.osc.geodata.modellistener;
import com.liferay.portal.ModelListenerException;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.search.IndexerRegistryUtil;
import com.liferay.portal.kernel.search.SearchException;
import com.liferay.portal.model.BaseModelListener;
import com.liferay.portal.model.Group;
import com.liferay.portal.service.ServiceContext;
import de.osc.geodata.model.ObjectGeodata;
import de.osc.geodata.service.ObjectGeodataLocalServiceUtil;
public class GroupModelListener extends BaseModelListener<Group> {
private static final Log log = LogFactoryUtil.getLog(GroupModelListener.class);
@Override
public void onAfterRemove(Group model) throws ModelListenerException {
try {
ObjectGeodata objectGeodata = ObjectGeodataLocalServiceUtil.getObjectGeodata(model.getClassNameId(), model.getClassPK());
if (objectGeodata != null) {
ObjectGeodataLocalServiceUtil.deleteObjectGeodata(objectGeodata);
}
} catch (SystemException e) {
log.warn("No GeodataObject found in Index.", e);
}
super.onAfterRemove(model);
}
}