在jOOQ 3.6中(首次出现此问题时),DSL.field()
API看到22个新的重载,它们使用不同Row
类型作为参数:
DSL.field(Row1
DSL.field(Row2
DSL.field(Row3
...
看来,通过上面这个特定的API用法,当javac编译器试图在所有可能的重载中找到最具体的重载时,新的重载会导致很多麻烦.以下解决方法立即编译:
固定一个修复程序下发行方式3.9.0,3.8.1,3.7.4,3.6.5,从公共API再次删除这些方法,并提供改名替代品不会造成任何超载的问题.
解决方法DSL.field()
重载import static org.jooq.impl.DSL.field; import org.jooq.Field; import org.jooq.SQLDialect; import org.jooq.impl.DSL; public class Test { public void method() { Field
and()
方法上下文中的目标类型推断import static org.jooq.impl.DSL.field; import org.jooq.Condition; import org.jooq.SQLDialect; import org.jooq.impl.DSL; public class Test { public void method() { Condition condition = field("client.id").eq(field("client_id")); DSL.using(SQLDialect.MYSQL) .select() .where(DSL.trueCondition()) .and(condition) .and(condition) .and(condition) .and(condition) .and(condition) .and(condition) .and(condition) .and(condition) .and(condition) .and(condition) ; } }更多信息
这实际上已在Stack Overflow上报告过:
对慢速编译进行故障排除
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8086048
在jOOQ用户组中也讨论过它:
https://groups.google.com/forum/#!topic/jooq-user/vuaG9d9krDk
https://groups.google.com/forum/#!topic/jooq-user/grv6Wu_sFtA