Tag: jooq

Jooq在生成的查询中动态更改db的架构

我在简单的数据库中有2个类似的模式 – “develop”和“stage”。 我已经使用Jooq为其中一个模式生成了Java类(例如“develop”)。 当jooq为db生成查询时,它会隐式地将模式的名称添加到所有查询的别名中 select “develop”.”image”.”id”, “develop”.”image”.”image_data” from “develop”.”image” where “develop”.”image”.”id” = ? 所以我的问题是,是否有办法在生成的查询中更改jooq模式名称(对于“stage”作为示例)而不重新生成jooq的“stage”模式类?

将HSQLDB与SQL Maven插件和jOOQ一起使用

这是一个类似的问题,如使用Flyway的嵌入式数据库和Maven中的jOOQ进行持续集成 ,尽管与我们使用的是sql-maven-plugin并不完全相同,而不是Flyway。 以下Maven插件配置失败: SQL-Maven的插件 org.codehaus.mojo sql-maven-plugin 1.5 create-database generate-sources execute ${db.driver} ${db.url} ${db.username} ${db.password} src/main/resources/sql/create-db.sql org.hsqldb hsqldb ${hsqldb.version} jooq-CODEGEN,行家 org.jooq jooq-codegen-maven ${jooq.version} generate-hsqldb generate-sources generate ${db.driver} ${db.url} ${db.username} ${db.password} PUBLIC com.example.db target/generated-sources/jooq-hsqldb 错误是: java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@cc76d81d[file =C:\Users\Lukas\example.db.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2015-10-14 10:49:15 heartbeat – read: -9975 ms. […]

任何有jOOQ的运算符

我很难理解以下内容。 我有一个字段和一些值: Field field = …; List values = …; 现在,我想在WHERE子句中表示filter field = ANY({… the values ….}) 。 PostgreSQL支持这个ANY(array of values)运算符。 我从https://blog.jooq.org/2017/03/30/sql-in-predicate-with-in-list-or-with-array-which-is-faster/得到了这个想法。 我尝试了以下创建条件: field.equal(PostgresDSL.any(PostgresDSL.array(values))); 以上不起作用。 这编译: field.equal((QuantifiedSelect) PostgresDSL.any(PostgresDSL.array(values))); 第一个问题 :为什么需要额外演员? API应该改变吗? 我不确定generics错误实际上是在哪一方(我和jOOQ)。 但是,在此更改之后,查询本身无法正常工作。 它给出了错误: org.jooq.exception.SQLDialectNotSupportedException: Type class java.util.ArrayList is not supported in dialect DEFAULT 第二个问题 :如何声明/创建值数组? 上面的调用PostgresDSL.array(…)正在回到DSL.array(…) ,这可能是第二个问题的根源?

JOOQ初始化DAO最佳方法

我想知道初始化JOOQ生成的DAO的最佳实践。 现在,我正在使用以下方法来启动JOOQ生成的DAO。 在以下情况中,StudentDao是JOOQ生成的。 public class ExtendedStudentDAO extends StudentDao { public ExtendedStudentDAO () { super(); } public ExtendedStudentDAO (Connection connection) { Configuration configuration = DSL.using(connection, JDBCUtils.dialect(connection)).configuration(); this.setConfiguration(configuration); } //adding extra methods to DAO using DSL public String getStudentName(Long ID) throws SQLException { try (Connection connection = ServiceConnectionManager.getConnection()) { DSLContext dslContext = ServiceConnectionManager .getDSLContext(connection); Record1 record = […]

jOOQ – 用于插入的多字段

我想表达以下INSERT语句: context.insertInto(TABLE A) .set(, context.select(FIELD A, FIELD B).from(B).where(…)) .set(… other field of table A …) .set(… other field of table A …) .set(… other field of table A …) .returning() .fetch() 子选择返回一行,其中两列( FIELD A和FIELD B )需要插入目标TABLE A 。 其原因是是TABLE B的主键。 TABLE A TABLE B (外键)。 这可能吗?

我们如何在JOOQ中拥有@variable?

我试图在Jooq中实现类似下面的MySql查询: Select CASE WHEN (datecolumn IS NULL) THEN (@outerval:=@outerval+1) ELSE (@outerval) END AS consec_set From some_table; 我们如何在JOOQ中拥有@variable? 注意:我知道JOOQ中CASE WHEN的等价物,但只是想知道@variable。 Jooq版本:3.0.1

多个联合查询选择后java 8

这是我想在MySQL中尝试的查询 SELECT Ax FROM A WHERE Ay = ‘P’ UNION SELECT Ax FROM A WHERE Ay = ‘Q’ 以上是我正在尝试的原始查询的简化版本。 在我的原始查询中,每个SELECT语句都涉及带有INNER JOIN多个表 如果我需要查询的表’A’的’y’列中可能的值的数量是’n’,那么我的查询将涉及在’ SELECT语句上执行’n-1’联合 我知道JOOQ可以组合多个SELECT语句。 但是有没有一个很好的方法来发布Java 8风格? 也许使用Steam.collect()? 这就是我的想法,但我想知道我是否能做得更好 String firstValueToQuery = valuesToQuery.get(0); Select<Record5> selectQuery = getSelectQueryForValue(firstValueToQuery); valuesToQuery.stream() .skip(1) .forEach(valueToQuery -> selectQuery.unionAll(getSelectQueryForValue(valueToQuery))); selectQuery.fetchStream(); 这是我实现getSelectQueryForValue private Select<Record5> getSelectQueryForValue(String valueToQuery) { return jooq.select( AP, AQ, AR, AS, AT) […]

JOOQ – 相当于用于填充历史字段的hibernate拦截器?

环境:Spring应用程序,使用JOOQ 3.7,使用Postgres作为我的数据库,自动从模式生成JOOQ映射代码。 我一直在将一些代码从Hibernate移植到JOOQ。 Hibernate代码在每个上下文的基础上提取一些身份validation细节,以填充“createdBy”,“updatedBy”,日期等字段。 我目前只能通过JOOQ看到这样做的唯一方法是开发人员必须记住每次更新对象时都要编写代码来手动更新字段,我可以看到它会很乏味且容易忘记填充字段。 使用JOOQ,我是否有办法以更好的方式处理每个表上的“历史字段”而不是手工编写一堆代码? 我们目前不使用DAO,我宁愿避免编写/生成整个代码层来处理这些历史字段。 另一种选择可能是在数据库中执行此操作,如果JOOQ无法帮助解决问题,那么这可能就是我们要做的。

如何在Jooq处理日期?

当我们使用普通JDBC连接时,我们使用下面的代码来格式化日期或转换日期 if(argDB.equals(“Oracle”)){ sb.append(” AND TO_CHAR(PaymentDate, ‘YYYY-MM-DD’) <= TO_CHAR(SYSDATE,'YYYY-MM-DD')"); } else { sb.append(" AND CONVERT(VARCHAR(8), PaymentDate, 112) <= CONVERT(varchar(8), dbo.getdate(), 112)"); } 现在我们正在使用JOOQ你认为我们必须像以前一样转换日期,否则JOOQ可以在内部处理这类问题。 正如我现在检查的那样JOOQ不支持Oracle和Lukas的TO_CHAR方法给出了一些替代方法

jooq-获取单个值

我有一个问题..为什么我重复了我在fetch方法中选择的内容。 Date minDate = getDSLContext() .select(CON_CAL_INSTANCE.DATE.min()) .from(CON_CAL_INSTANCE) .join(CON_CAL_TEMPLATES) .on(CON_CAL_INSTANCE.TEMPLATE_ID.eq(CON_CAL_TEMPLATES.ID)) .where(CON_CAL_TEMPLATES.ENTRY_TYPE.in(“REPT”, “HRPT”)) .fetchOne(CON_CAL_INSTANCE.DATE.min()); 所以我在select子句中提供了CON_CAL_INSTANCE.DATE.min() ,为什么我必须在fetchOne(CON_CAL_INSTANCE.DATE.min())重复它? 或者我不是这样做的吗?