jfinal 自动生成的映射文件mappingkit里,视图没有primaryKey,导致启动报错

jfinal2.2 框架下,使用generator自动生成model,mappingkit文件里生成的语句是类似下面这样的,但是没办法启动,因为第二个参数是主键,视图CV_VEHICLE因为没有主键,报错java.lang.IllegalArgumentException: Primary key can not be blank

arp.addMapping("CV_VEHICLE", "", CvVehicle.class);

现在我的解决办法是手动把所有视图的第二个参数去掉,变成 arp.addMapping("CV_VEHICLE", CvVehicle.class);

可这样每次重新生成都得去修改一遍很是麻烦,请教各位大神,除了改generator源码以外有没有什么办法解决????

====================

另外修改源码的办法,我在源码MappingKitGenerator类中找到这一节

protected void genMappingMethod(List<TableMeta> tableMetas, StringBuilder ret) {
        ret.append(String.format(this.mappingMethodDefineTemplate));
        Iterator i$ = tableMetas.iterator();

        while(i$.hasNext()) {
            TableMeta tableMeta = (TableMeta)i$.next();
            boolean isCompositPrimaryKey = tableMeta.primaryKey.contains(",");
            if (isCompositPrimaryKey) {
                ret.append(String.format(this.compositeKeyTemplate, tableMeta.primaryKey));
            }

            //就是这一句在拼addMapping语句,表名,主键,model类
            String add = String.format(this.mappingMethodContentTemplate, tableMeta.name, tableMeta.primaryKey, tableMeta.modelName);
            
            ret.append(add);
        }

        ret.append(String.format("\t}%n"));
    }

我想问的是这玩意里该如何判断是视图还是表?
还是只能在命名的时候用前缀区分表和视图,可是这样用在不同前缀的数据库时就又要改源码了,刚接触这个jfinal,也不知道说清楚没有,我也是很纠结啊。。。。

阅读 4k
1 个回答
新手上路,请多包涵
public class _MetaBuilder extends MetaBuilder {
    ...
}

扩展自定义 MetaBuilder

主要是修改build() 方法,增加一个规则,如果没有主键,就使用
`/**

 * 如果没有主键,使用所有字段作为联合主键
 * @param tableMeta
 */
private void buildPrimaryKeyIsNull(TableMeta tableMeta) {
    if(tableMeta.primaryKey.equals("")) {
            System.out.println(tableMeta.name + "表没有主键,使用以下字段作为联合主键");
        for(ColumnMeta cm : tableMeta.columnMetas) {
            System.out.println(cm.attrName);
            // 使用表字段联合主键
            tableMeta.primaryKey += cm.attrName + ",";
        }
        
        tableMeta.primaryKey = tableMeta.primaryKey.substring(0, tableMeta.primaryKey.length() - 1);
    }
}

`

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题