Tag: jooq

在JOOQ中,如果我直接使用底层连接,是否保持我的事务状态?

让我们假设我有一个DSLContext对象,我需要下拉到JDBC Connection对象的级别来执行一些非JOOQ逻辑。 (在我的情况下,我想使用Postgres驱动程序的CopyManager对象)。 如果我的DSLContext是事务性的,那么直接在Connection上执行的操作是否会被相同的事务包装? 我正在使用JOOQ的默认交易提供者。 例如(Kotlin代码,但对于Java用户应该是非常透明的) dsl.transaction { transactionConfig -> val transactionalDSL = DSL.using(transactionConfig) transactionalDSL.connection { connection -> val manager = CopyManager(connection as BaseConnection) manager.copyInto(table, inputStream, fields) } }

带有Gradle和Kotlin的JOOQ不会生成文件

我在build.gradle.kts中有以下gradle任务。 它应该从我的JPA实体生成文件。 但是,运行此任务时,一旦成功,将不会生成文件或目录。 task(name = “generateJooq”) { doLast { val configuration = Configuration().apply { generator = Generator().apply { database = Database().apply { name = “org.jooq.util.jpa.JPADatabase” properties = listOf(Property().apply { key = “packages” value = “com.example.sample” }) } target = Target().apply { packageName = “com.example.jooq” directory = “src/generated/java” } } } GenerationTool.generate(configuration) } } 这是我的实体生活在包com.example.sample 。 […]

测试JOOQ postgres jsonb列键是否存在

我有一个表,其中包含名为tags的jsonb列。 每行中的tags元素可能包含或不包含称为group的字段。 我的目标是通过tags.group为tags包含group字段的所有行进行group 。 像下面的postgres查询一样: select tags->>'group' as group, sum(n) as sum from TABLE where tags ? 'group' group by tags->>'group'; 我试图把它变成JOOQ,无法找到如何表示where tags ? 'group' where tags ? 'group'条件。 例如, val selectGroup = DSL.field("{0}->>'{1}'", String::class.java, TABLE.TAGS, "group") dsl().select(selectGroup, DSL.sum(TABLE.N)) .from(TABLE) .where(TABLE.TAGS.contains('group')) .groupBy(selectGroup) 这相当于在postgres中包含条件@> 。 但是我需要做存在的条件? 。 我怎么能在JOOQ表达呢?

我可以重用/组成一个存储库方法JOOQ查询的一部分?

使用DSLContext变量ctx我有一个方法来选择所有的关系数据。 open fun selectAllSomethings(id: String): List<SomeDto> = ctx .select(..), .from(..) .join(..) .leftJoin(…) .fetch() .map() 我需要重复使用这个逻辑与add方法,其中为具体的id我想改变代码使用fetchOne和map 。 如何重用查询的第一部分并在两个方法之间共享? 这部分: ctx.select(..), .from(..) .join(..) .leftJoin(…) 是否有必要把它分成两种不同的方法? 或者需要添加一个if ?

JOOQ总和字段值:BigDecimal到Int

我使用postgres的数值字段。 JOOQ把它变成BigDecimal 。 我的JOOQ查询是: val sumField = DSL.sum(TABLE.VALUE) val query = dsl().select(TABLE.id.`as`("id"), sumField.`as`("sum")) .from(TABLE) .groupBy(TABLE.id) .fetch() .map{ record -> SumById( id = record.get("id").toString(), sum = record.get("sum").toString().toInt() ) } SumById是一个带有id和sum字段的数据类: data class SumById (val id: String, val sum: Int) 我可以通过执行.toString().toInt()来获得Int总和。 但是我想知道是否有更好的方法把BigDecimal为Int 。 PS 我想这是一个比JOOQ问题更多的kotlin问题。

Jooq事务:如果在事务中抛出异常,连接不会释放到池中

我使用Jooq的HikariCP。 代码:*在Kotlin: //dataSource is from Hikari DSL.using(dataSource, sqlDialect).transaction { config -> //in create it simply calls dsl.insertInto …. UserRepo.create(User(name="joe"), DSL.using(config)) UserRepo.create(User(name="foo"), DSL.using(config)) } 一切运行正常。 但是,如果我扔在块,连接不关闭(释放)(尽管事务回滚)。 更新: 我是Java新手,所以这是我的错。 在测试中,我曾经抛出Kotlin的Throwable (而不是Exception ),这是Java代码不能正确处理的部分。 一切正常预期与例外。

kotlin jooq(3.9.3商业跟踪)生成器oracle日期到时间戳

我需要oracle11数据库中的隐藏日期列到Java中的时间戳类型 所以我在jooq-config.xml中设置了自定义类型和强制类型,就像https://www.jooq.org/doc/3.9/manual/reference/reference-data-types/data-types-oracle-date/ 生成表类都可以,但Java项目编译失败,错误如下: no suitable method found for createField(java.lang.String,org.jooq.DataType<java.sql.Date>,org.jooq.tdetails.tables.ApplicationChecklist,java.lang.String,org.jooq.impl.DateAsTimestampBinding) method org.jooq.impl.AbstractTable.<R,T>createField(java.lang.String,org.jooq.DataType<T>,org.jooq.Table<R>) is not applicable (cannot infer type-variable(s) R,T (actual and formal argument lists differ in length)) method org.jooq.impl.AbstractTable.<R,T>createField(java.lang.String,org.jooq.DataType<T>,org.jooq.Table<R>,java.lang.String) is not applicable (cannot infer type-variable(s) R,T (actual and formal argument lists differ in length)) method org.jooq.impl.AbstractTable.<R,T,U>createField(java.lang.String,org.jooq.DataType<T>,org.jooq.Table<R>,java.lang.String,org.jooq.Converter<T,U>) is not applicable (cannot infer type-variable(s) R,T,U (argument mismatch; org.jooq.impl.DateAsTimestampBinding […]

如何在Kotlin类中注入JOOQ的DSLcontext

我用Kotlin,Spring和PostgreSQL使用JOOQ。 我能够运行JOOQ生成器和查询数据。 问题是我无法在资源库类的构造函数中注入DSLcontext。 它抛出以下异常: dslContext中的字段dslContext需要一个无法找到的类型为org.jooq.DSLContext的bean。 注射看起来像这样: @Repository class SomeRepositoryImpl(private val dslContext: DSLContext): SomeRepository { } 干杯,翁德里

如何在Kotlin中更轻松地使用Jooq交易?

我有使用事务写在Kotlin的Jooq代码,有时候我想要一个独立工作的方法,作为一个顶级的动作,有自己的事务,有时候也希望它在同一个事务中与其他方法合作。 例如,我有两个较低级别的函数actionAbc和actionXyz ,我想组合成不同的更高级别的数据方法,并继承它们的事务(如果存在的话),否则有它们自己的。 我知道在Spring或其他框架中有注释,可以添加验证“事务所需”或“创建事务如果没有”类型的功能。 但是,如何在不使用这些库的情况下对Jooq + Kotlin执行相同的操作? 我想出的最接近的是将事务作为可选参数传递,如果缺失,则将其默认为新事务。 但是,如果有人忘记了通过交易,那么使用一个新的顶级和不相关的交易的微妙失败,我不想这样做。 fun tx(ctx: DSLContext = rootContext, codeBlock: DSLContext.() -> Unit): Unit { ctx.transaction { cfg -> DSL.using(cfg).codeBlock() } } } // and used as: fun actionAbc(parm1: String, parm2: Int, ctx: DSLContext = rootContext) { tx(ctx) { … } } fun actionXyz(parm: Date, ctx: DSLContext = rootContext) { […]