Jfinal关于使用generator生成器自动完成setter,getter映射报primaryKey required by active record pattern

今天在使用网站提供的demo的时候,按照流程在数据库里面创建了一个Blog表。然后启动运行 OK! 但是如果运行里面提供的_JfinalGeneratorDemo工具类的时候,就会报primaryKey required by active record pattern。。经过仔细排查,和查看社区反馈的消息。发现如果使用这个工具类进行映射的时候,必须在保证这个表有primary key的同时  也要保证数据库里面所有表都要有primary key。。即使你只是映射了一个表(我之前把这个表创建在我以前的数据库里面就会报错,在debug模式下发现 会去映射所有表。然后新建一个数据库再创建这个表就OK了!)    有点坑!!!!!!

评论区

JFinal

2017-04-13 11:23

将那些不需要映射的,没有主键的表进行排除就可以了:
generator.addExcludedTable(tableName)

hiberk

2017-04-13 13:28

@JFinal 当数据库比较大的时候,我也不知道那些表是没有主键的。。如果我想指定只映射某个表,该操作那个类?

hiberk

2017-04-13 13:30

@JFinal 很多个模块用的都是一个数据库。如果只是想按照模块来映射表?只映射自己指定的表该怎么操作。

JFinal

2017-04-13 14:40

@hiberk 通过继承一下 MetaBuilder 类,然后覆盖掉其中的 isSkipTable(String tableName) 方法,可以随心所欲控制想要的处理的 table

isSkipTable 方法 return true 时将过滤掉当前 table,可以利用正则,或者其它自己合适的方式设置规则,只处理自己想要的 table

generator 模块所有组件都面向扩展设计,可以通过继承自由定制功能

cicicv

2017-04-17 14:35

幽梦萧瑟

2017-11-17 16:49

@JFinal 视图也不行, 应该怎么生成呢?

l30961171

2018-04-21 13:03

@JFinal 通过继承一下 MetaBuilder 类,然后覆盖掉其中的 isSkipTable(String tableName) 方法,可以随心所欲控制想要的处理的 table。这里,jfinal能不能直接把isSkipTable(String table)放到Generator类中?这样就不用重写一个类了。

JFinal

2018-04-21 15:58

@l30961171 目前需要通过继承 MetaBuilder,然后将继承类替代掉原来的 MetaBuilder,在 Generator 中有 setMetaBuilder(...) 可以进行配置替换

即便是将 isSkipTable(String table) 放到 Generator 类中,那就变成了要继承 Generator 类了

这里要改进的话,可以抽取出一个 TableFilter 的接口来,专门用于过滤 table

对呀

2019-02-22 16:03

@JFinal 是随便创建一个类继承MetaBuilder嘛, 覆盖掉isSkipTable方法是什么意思呐!

对呀

2019-02-22 16:14

我继承了MetaBuilder ,但是重写的MetaBuilder方法是
public pojo(DataSource dataSource) {
super(dataSource);
// TODO Auto-generated constructor stub
}

热门反馈

扫码入社