Liferay研究之十九:ServiceBuilder的一个Bug

如果在liferay的某个portlet目录下的service.xml中进行修改,比如想让不同的Company的JournalArticle能共享,则需要编写一个relationship class,以及相关的Entity类。

因为liferay是MDA的,所以,只需要修改对应的service.xml,然后通过ant build-service-portlet-xxxx即可生成对应的代码,这里不再细说,请参见我以前的文章。

http://www.smilingleo.cn/web/guest/3?p_p_id=62_INSTANCE_94No&p_p_action=0&p_p_state=maximized&p_p_mode=view&_62_INSTANCE_94No_struts_action=%2Fjournal_articles%2Fview&_62_INSTANCE_94No_keywords=&_62_INSTANCE_94No_advancedSearch=false&_62_INSTANCE_94No_andOperator=true&_62_INSTANCE_94No_groupId=16725&_62_INSTANCE_94No_searchArticleId=&_62_INSTANCE_94No_version=1.0&_62_INSTANCE_94No_name=&_62_INSTANCE_94No_description=&_62_INSTANCE_94No_content=&_62_INSTANCE_94No_type=Portal&_62_INSTANCE_94No_structureId=&_62_INSTANCE_94No_templateId=&_62_INSTANCE_94No_status=approved&_62_INSTANCE_94No_articleId=16886

 这里要说的是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中,然后再执行。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值