如何在liferay服务xml文件中实现引用完整性和级联操作?

如何在liferay服务xml文件中实现引用完整性和级联操作?,liferay,liferay-6,Liferay,Liferay 6,我需要使用liferay service builder实现onDelete级联功能。如何在liferay中实现这一点?首先: onDelete级联不是Liferay Service Builder功能。这是数据库提供的功能 下一步: Liferay的前提是,所有数据处理和评估都应该在代码中完成,而不是在数据库中 尽管如此: 类似于onDelete级联的是实现一个模型侦听器。ModelListener正在侦听模型的更改。(我知道,误导性的名称;))在这个模型侦听器中,您将实现onAfterRem

我需要使用liferay service builder实现onDelete级联功能。如何在liferay中实现这一点?

首先:

onDelete级联不是Liferay Service Builder功能。这是数据库提供的功能

下一步: Liferay的前提是,所有数据处理和评估都应该在代码中完成,而不是在数据库中

尽管如此:

类似于onDelete级联的是实现一个模型侦听器。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);
    }

}
package de.osc.geodata.modelstener;
导入com.liferay.portal.ModelListenerException;
导入com.liferay.portal.kernel.exception.PortalException;
导入com.liferay.portal.kernel.exception.SystemException;
导入com.liferay.portal.kernel.log.log;
导入com.liferay.portal.kernel.log.LogFactoryUtil;
导入com.liferay.portal.kernel.search.IndexerRegistryUtil;
导入com.liferay.portal.kernel.search.SearchException;
导入com.liferay.portal.model.BaseModelListener;
导入com.liferay.portal.model.Group;
导入com.liferay.portal.service.ServiceContext;
导入de.osc.geodata.model.ObjectGeodata;
导入de.osc.geodata.service.ObjectGeodataLocalServiceUtil;
公共类GroupModelListener扩展了BaseModelListener{
私有静态最终日志Log=LogFactoryUtil.getLog(GroupModelListener.class);
@凌驾
AfterRemove(组模型)上的公共void引发ModelListenerException{
试一试{
ObjectGeodata ObjectGeodata=ObjectGeodataLocalServiceUtil.getObjectGeodata(model.getClassNameId(),model.getClassPK());
if(objectGeodata!=null){
ObjectGeodataLocalServiceUtil.deleteObjectGeodata(objectGeodata);
}
}捕获(系统异常e){
log.warn(“索引中未找到GeodataObject.”,e);
}
super.onAfterRemove(模型);
}
}