【发布时间】:2014-06-15 06:43:16
【问题描述】:
我一直在使用 Hibernate 的基于 MySQL 的应用程序的功能测试部分使用 H2。我终于受够了它,我决定主要使用 jOOQ,这样我仍然可以从底层数据库中抽象出自己。
我的问题是我根本不喜欢 jOOQ 所做的这种代码生成操作,因为我还没有看到在多个配置文件中正确设置它的示例,也不喜欢连接到数据库作为我的构建。总体而言,这是一个非常令人讨厌的设置,我不想花一个上午的时间来意识到这非常可怕,我不希望它出现在项目中。
我正在使用 tableByName() 和 fieldByName() 代替,我认为这是一个很好的解决方案,但我遇到了 H2 将所有内容都大写的问题。
如果我执行Query deleteInclusiveQuery = jooqContext.delete(tableByName("inclusive_test"))... 之类的操作,我会得到 table inclusive_test not found。请注意,这与连接延迟或关闭配置无关。
我尝试将连接更改为使用;DATABASE_TO_UPPER=false,但后来我发现未找到字段(我认为它会翻译所有架构)。
我不确定 H2 是否无法创建非大写模式,或者我在这方面失败了。如果是前者,那么我希望 jOOQ 在查询中也将表名和字段名大写。
示例输出为:
delete from "inclusive_test" where "segment_id" in (select "id" from "segment" where "external_taxonomy_id" = 1)
如果没有像这样创建 H2 模式,那将是正确的,但是我正在创建模式的查询专门将它放在小写字母中,但最终它最终变成大写字母,Hibernate 似乎可以理解或解决,但不是 jOOQ
无论如何,我在问是否有解决方案,因为我现在非常失望,我正在考虑放弃我无法使用 Hibernate 的测试。
欢迎任何不使用代码生成功能的解决方案。
【问题讨论】:
-
我认为我们需要一个简单、完整、可重现的测试用例。
-
是的,不幸的是,我的案例不是一个简单的案例,我必须制作它,底线是,使用原始准备好的语句不适用于 H2(除非您设法将模式小写) ,如果您使用 AS_IS 设置或设置 database_to_upper=false,jOOQ 似乎可以解决问题...我不太确定我是否了解驱动程序、jOOQ、架构或谁是大写和小写哪个东西...我觉得他们一开始就想把任何东西都大写是很愚蠢的:/
标签: java mysql relational-database h2 jooq