问题标签 [spring-data-jdbc]

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 回答
1013 浏览

spring-data-jdbc - 如何使用@Query 查询多个列但不是所有列,但仍使用域数据模型与 Spring Data JDBC 进行映射?

我的数据模型是

我的存储库是

这将导致异常说'orderId column not found [42122-190]'。所以 Spring 期望你总是查询所有的列。我知道使用 JPA,我们在实体和数据模式之间建立了强大的映射关系。但是 Spring Data JDBC 的重点是避免 POJO 的数据模型和数据库模式之间的紧密耦合。为什么 EntityRowMapper 不只是映射NULL到不属于查询的属性?

有没有办法告诉使用的 RowMapper 忽略不属于查询的属性?为这些简单的查询单独创建RowMapper似乎是很多不必要的工作。

我仍然可以通过更改查询来解决这个问题

但这仍然会用空值序列化整个对象。我在这里遗漏了一些明显的东西吗?

注意这不是 Spring Data JPA。它的 Spring Data JDBC。

编辑 更深入地研究它,例外是来自 h2 数据库库。

0 投票
1 回答
222 浏览

jdbc - 从属性文件 JDBC Java 加载查询

所以,案例如下。

我有一段看起来像这样的代码:

连同@EnableJDBCRepositories在我的@Configuration文件中,这允许我在 JDBC 中本地执行自定义查询。

现在,我需要的是替换它

像这样:

.properties"query.one"文件中属性的占位符在哪里,如下所示:

我怎么能做到这一点?

0 投票
1 回答
1285 浏览

spring-data-jdbc - 使用 Azure SQL Server 保存聚合根时出现 DataRetrievalFailureException

问题描述 -

  • 保存没有嵌入实体的聚合根工作正常
  • 保存聚合另一个实体(一对一包含关系)的聚合根时会出现问题
  • 当我看到正确的准备好的语句时,Spring Data JDBC 似乎表现正确(插入根实体,获取生成的键,然后插入聚合实体)
  • 在我看来,问题出现在 GenerateKeyHold 类中,该类正在接收带有一个条目“[{GENERATED_KEYS=null}]”的“keyList”
  • 该代码针对空列表进行测试,但不针对空 GENERATED_KEYS
  • 数据库驱动程序正确插入了行,但是代码尝试检索生成的 id 但它为空,因此出现强制转换异常
  • 我包括示例代码(实体、脚本创建)和堆栈跟踪
  • 请注意,我在使用内存 H2 数据库时没有观察到这个问题
  • 我正在使用 spring-boot-starter-data-jdbc:jar:2.1.3.RELEASE ,它正在拉动 spring-data-jdbc:jar:1.0.5.RELEASE

如果您能帮助我找出导致此类问题的原因,我将不胜感激;我做了很多研究,但没有人报告这样的问题(由于 ROWID 到数字转换的 Oracle DB 除外)

实体

SQL Server 创建脚本

例外

0 投票
1 回答
449 浏览

spring-data-jdbc - @Version 列无法使用 spring 数据 jdbc 开箱即用

我的版本列是这样定义的

使用 Spring Data JDBC,它总是试图插入。更新没有发生。当我调试时,我看到,PersistentEntityIsNewStrategy正在使用这是默认策略。它有isNew()方法来确定被持久化的实体的状态。我确实看到该版本和 id 用于此确定。

但我的问题是谁负责在每次保存后增加版本列,这样当第二次.save()调用时,该isNew()方法可以返回 false。

我们是否应该触发 aBeforeSaveEvent并处理 Version 列的增量?这足以应付OptimisticLock吗?

编辑 我添加了一个 ApplicationListener 来像这样收听 BeforeSaveEvent 。

所以现在版本列有效,但其余可审核字段@CreatedAt, @CreatedBy,@LastModifiedDate and @LastModifiedBy未设置!

编辑2

创建了一个新的 ApplicationListener ,如下所示。在这种情况下,我的自定义侦听器和 Spring 的 RelationalAuditingListener 都被调用了。但它仍然不能解决问题。因为侦听器的顺序[自定义一个后跟 spring 的] 使得markAudited调用markUpdated而不是markCreated,因为版本列已经增加。我试图让我的听众LOWEST_PRECEDENCE仍然没有运气。

我的自定义监听器在这里

}

0 投票
1 回答
245 浏览

java - spring-data-jdbc 中是否有相当于@BatchSize

嗨,我使用 spring 数据来映射我的实体和存储库。映射非常简单:

我使用我的 spring 数据存储库的 findAllByIds(Iterable) 接口。它会以以下形式生成一个不错的 sql:

对于每辆 Car,它只执行一个 SQL。

我的问题从获取相关部分开始。它似乎正在一一获取它们。spring data jdbc 中是否有与 hibernate 中的批量获取等效的东西?

如果分析器是否定的,是否有一些相对简单的方法来实现它?

0 投票
2 回答
2551 浏览

java - 用 spring-data-jdbc 1.1.0 替换 Spring-data-jdbc 1.0.5 的问题

spring-boot-starter-jdbc 的最后一个版本包含 spring-data-jdbc 1.0.5 版本。我正在尝试更新 spring-data-jdbc 的版本。但是控制台向我显示了一个问题。

0 投票
0 回答
96 浏览

java - 使用 spring-data-jdbc 从数据库中检索聚合子对象中的一对多关系时映射不正确

我有一个具有一对一关系的聚合,并且在第二级中,子实体具有一对多关系(列表)。当前,当实体被保存时,它会执行预期的操作,并且可以正常保存。但是当我尝试从数据库中获取实体时,生成的 SQL 是错误的,从而导致错误。我真的不能告诉我在这里缺少什么,任何帮助将不胜感激。我正在使用 Lombok、spring-data-jdbc 和 spring-boot。也许龙目岛有事可做,但我不知道。Heres代码举例说明我在说什么:界面

实体

这是 DDL

问题是,当我保存一个新实体时它没问题,但是当我尝试从数据库中获取它时,生成的 sql 会在表之间建立一个连接,其中包含实体中存在的列“详细信息”,但显然它不是桌子。这是我得到的错误

PreparedStatementCallback; 错误的 SQL 语法 [SELECT charge.id AS id, charge.some_data AS some_data, summary.id AS summary_id, summary.other_data AS summary_other_data, summary.details AS summary_details FROM charge LEFT OUTER JOIN summary AS summary ON summary.charge = charge.id WHERE charge.id = ?]; 嵌套异常是 org.h2.jdbc.JdbcSQLException: Column \"SUMMARY.DETAILS\" not found \nColumn \"SUMMARY.DETAILS\" not found; SQL 语句:\nSELECT charge.id AS id,charge.some_data AS some_data,summary.id AS summary_id,summary.other_data AS summary_other_data,summary.details AS summary_details FROM charge LEFT OUTER JOIN summary AS summary ON summary.charge = charge.id哪里charge.id =?

我在这里缺少什么?编辑:忘记添加,如果列表在根聚合中,它工作正常。

0 投票
1 回答
4132 浏览

java - 复合键和 spring-data-jdbc

我有一个使用复合键的数据库。是否可以使用 spring-data-jdbc?我尝试了里程碑版本 1.1M2,其中我以以下方式映射了我的实体:

然后在我的存储库类中,我添加了

我跟踪了SQL,它没有工作。嵌入部分有效,但 where 子句不正确。它使用单个参数保持器,而不是使用常规的复合键结构,其中 element1=subkey1 和 element2=subkey2 等等......

我有两个问题。有什么方法可以使复合 ID 工作?

第二个问题是,假设我在 SAVE 方法的基础@Query上使用了一个自定义findByID,如果之后,SAVE 方法会起作用吗?什么是根本没有ID,如果我只是随机选择一个列并说你将成为我的ID怎么办?

0 投票
1 回答
1466 浏览

java - 通过 spring-data-jdbc Resultset.TYPE_FORWARD_ONLY READ_ONLY 流式传输非常大的表

嗨,我想流式传输一个非常大的表 spring-data-jdbc。为此,我已将连接设置为 READ_ONLY 我已在我的存储库中声明了一个方法,该方法如下所示:

我在这里的期望是结果集的类型为 FORWARD_ONLY,并且在从数据库中收到所有结果之前,此方法不会无限期地阻塞。

在这里,我将与 Spring Data JPA 进行比较,其中 Stream 方法没有阻塞,并且根据获取大小分部分获取数据库的内容。

我错过了一些配置吗?如何使用 spring-data-jdbc 实现这种行为?

更新:我将以不同的形式提出问题。如何使用 spring-data-jdbs 实现相当于:

0 投票
2 回答
2614 浏览

spring-data - 我可以使用 spring-data-jdbc 进行分页吗?

我想将 PagingAndSortingRepository 与 spring-data-jdbc 一起使用,但它似乎不起作用。它仅适用于 JPA 吗?

我尝试使用 PagingAndSortingRepository 并使用 findAll(Pageable pageable)。

但我实际上得到一个“在 findAll 上没有指定查询”