问题标签 [jdbi3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
848 浏览

java - jdbi在使用reduceRows加入时抛出错误,一对多关系

我正在尝试使用 JDBI 编写一个对象查询来处理一对多关系。如文档中所见,reduceRows是这样做的方法。但是我把这些错误归咎于构造函数;

更新:为每个实体保留一个构造函数。

我测试了文档中的代码,得到了这些堆栈跟踪:

我的代码:

摇篮依赖:

将不胜感激任何帮助/有人指出我正确的方向!是否可以在 Dao 界面中做到这一点?

0 投票
1 回答
1139 浏览

java - 如何在非接口非抽象类中使用 JDBI @Transaction 注解?

所以我来自 Spring Boot 背景,我对 Spring@Transactional注解如何与 Hibernate 无缝协作印象深刻。我现在正在开发一个 Dropwizard 应用程序,该应用程序正在使用Jdbi3. 而且我发现了一个类似的注释,它的工作方式与某些先决条件@Transaction完全相同。Spring

春天

所以根据 Spring Guidelines,RepositoryController是分别与数据库和 HTTP 请求通信的两个接口,ServiceLayer 是所有业务逻辑所在的地方。总是有这样一种情况,服务中的单个方法使用多个存储库执行 CRUD 操作。因此,让服务方法使用 注释非常有意义@Transational

Jdbi 与 Dropwizard

如果我错了,请纠正我。在这里JdbiRepository成为DaoController成为ResourceService留下Service。也许不同的人使用不同的层架构,但让我们假设这是我的问题所在的情况。

问题陈述

我希望在 Jdbi 中实现与 Spring 中相同的事务处理,因为它对我来说更有意义,而无需添加任何额外的层。这是我将抛出一些代码,我希望实现的目标:

Dao1.kt

Dao2.kt

Service.kt

需要注意的几点

  • 我知道onDemand只能在abstract类或接口上使用,因此我无法Service使用onDemand. 我也不能做我的Service摘要。

  • 很少有文章建议做一个摘要RepositoryTransaction在那里使用。但是根据我想到存储库时的想法,我看到它与entity/table. 或者可能是相关实体。所以如果我想在同一个服务方法中更新movieuser表,将这两个事务语句放在一个方法下XRepository对我来说听起来很荒谬。它是业务逻辑的一部分,应该驻留在Service.

  • 我想我可以使用jdbi.inTransactionand jdbi.useTransactionDao但在那种情况下,我必须手动附加每一个。有没有更好的方法来做到这一点?

谢谢

0 投票
1 回答
384 浏览

java - Spring Boot 自定义 Bean 加载器

我将 JDBI 与 Spring Boot 结合使用。我按照本指南创建了一个类:JdbiConfig在其中,对于应用程序上下文中需要的每个 dao,您必须添加:

我想知道 Spring Boot 中是否有某种方法可以创建自定义处理器来创建 bean 并将它们放入应用程序上下文中。我对这如何工作有两个想法:

  1. 使用自定义注解对 DAO 进行注解@JdbiDao并编写一些内容来获取它们。我曾尝试手动将这些注入到应用程序启动中,但问题是它们可能无法及时加载以注入,因为它们在类扫描期间无法识别。
  2. 创建一个JdbiDao每个存储库接口都可以扩展的类。然后用标准注释接口@Repository并创建一个自定义处理器以通过以下方式加载它们Jdbi#onDemand

这是我的两个想法,但我不知道有什么方法可以实现。我坚持手动创建一个bean?这个问题以前解决过吗?

0 投票
1 回答
343 浏览

java - Jdbi3:具有多个dao和@Transaction注解的事务

我必须执行一个涉及多个 dao 中的方法的事务,所以我使用的是类似的东西:

但是如果例如在Dao1method1 中用 注释@Transaction,例如:

上面的句柄部分会在同一个事务中执行这两种方法吗?还是method1会在执行过程中开启一个新事务?

0 投票
0 回答
438 浏览

java - 使用 JDBI 的 Quarkus

我正在使用quarkusJDBI。是否有任何等效于Spring 的TransactionAwareDataSourceProxy.class的类,当它请求新的连接时,它将包装 DataSource 强制JDBI获取与当前事务关联的现有连接。

0 投票
1 回答
610 浏览

java - 有没有办法使用自定义策略来映射 JDBI3 中的枚举类型?

我有一个简单的场景,其中正在发送枚举以进行存储,我想将其拉出。但是,我不能使用OrdinalName策略。存储的值是每个枚举实例中的值。

TLDR:有没有办法让我注册一个映射器,它在持久性上做一件事,在检索上做另一件事?

免责声明:我没有使用 posgres

最简单的表

我正在尝试提取数据,但出现以下错误: Exception in thread "main" org.jdbi.v3.core.result.UnableToProduceResultException: no N value could be matched to the name 15

我知道我正在使用AbstractArgumentFactory,我认为这是我问题的根源。我认为这个助手不能灵活地满足我的需求。

有没有办法让我注册一个映射器,它在持久性上做一件事,在检索上做另一件事?

0 投票
0 回答
816 浏览

jdbi - 使用 JDBI 映射 @Json 属性

根据 JDBI 文档https://jdbi.org/#_jackson_2,拥有对象模型的 json 属性似乎很简单,但是我尝试了以下方法,但遇到了很多问题。

DB:具有 Jsonb 列类型的 Postgres

数据源已配置

插入绑定列表的SQL

运行代码插入时,出现以下错误:

如果我创建了 EventPropertyArgumentFactory 并使用 Jackson ObjectMapper 和 writeValueAsString,那么我可以将它保存到 DB。但是,当从数据库中检索它时

抛出以下错误

我认为我需要做的就是声明用@Json 注释的字段,DB 列必须是 json/jsonb 类型并安装插件,但似乎情况并非如此?

任何人都成功地尝试过这个,而不必定义自定义行映射器和参数工厂实现?

谢谢

0 投票
0 回答
151 浏览

java - Jdbi字符串模板引擎条件表达式

我正在尝试将 jdbi 字符串模板引擎与 if 条件中的表达式一起使用。我尝试了不同的版本:

但我还没有找到一种方法来使用带有逻辑表达式而不是布尔值的 if 条件。是否有可能出现这种行为,或者我必须将 N 个布尔变量传递给我的 dao 方法?

0 投票
1 回答
918 浏览

java - org.jdbi.v3.core.statement.UnableToCreateStatementException:查询声明无时提供了多余的命名参数

我想从用户类型列表中获取 Id 列表。
这里 User.UserType 是一个枚举。在方法(getUserIdsByListOfTypes)中,我传递了枚举类型列表的参数(userTypes)。
我无法理解查询中的问题出在哪里。

0 投票
1 回答
175 浏览

jdbi - 如何从 JDBI3 中的 SQL-Object 映射 SQLException

假设我将表定义为:

重要的部分是NAME_IS_UNIQUE约束。

对应的 POJO 项为:

和 SQL-Object 接口,其方法定义为:

如果我尝试使用已经存在的 NAME 插入到项目中,那么我将获得关于约束 NAME_IS_UNIQUE 违规的数据库供应商特定的 SQLException。

有没有办法提供 SQLException 和应用程序特定异常(例如 ItemNameUniqueConstraintException)之间的映射,所以insert方法本质上将其签名更改为类似于下面的签名?

问题不是关于特定的 UNIQUE 约束,而是更多关于一般情况的问题,其中 SQLException 可以是任何事情:比如违反引用完整性或违反检查约束等。