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

发布于 2022-09-06 00:35:00 字数 1423 浏览 42 评论 0

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,也不知道说清楚没有,我也是很纠结啊。。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

他是夢罘是命 2022-09-13 00:35:00
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);
    }
}

`

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文