如果在liferay的某个portlet目录下的service.xml中进行修改,比如想让不同的Company的JournalArticle能共享,则需要编写一个relationship class,以及相关的Entity类。
因为liferay是MDA的,所以,只需要修改对应的service.xml,然后通过ant build-service-portlet-xxxx即可生成对应的代码,这里不再细说,请参见我以前的文章。
这里要说的是ServiceBuilder有一个Bug,就是在做数据库字段设计的时候,有一些bad field需要做转换,但是却转换的不完全。
修改如下:
ServiceBuilder 4709行Bug,需要判断是否badField,添加下面代码:
String _pkVarName = pkVarName;
if (_badCmpFields.contains(pkVarName)) {
_pkVarName += "_";
}
然后将下面出现的pkVarName替换为_pkVarName。
Entity.java line:156, getPkVarName()方法中,也需要判断主键是否是badField
String pkVarName = col.getName();
if (ServiceBuilder.getBadCmpFields().contains(pkVarName)){
pkVarName += "_";
}
return pkVarName;
另外:
默认build.xml中build-service-portlet-xxx,执行的是lib/portal-impl.jar中的ServiceBuilder.class,如果修改了ServiceBuilder源码,还需要先通过ant jar将修改打包到jar中,然后再执行。