问题标签 [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.
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 数据库库。
jdbc - 从属性文件 JDBC Java 加载查询
所以,案例如下。
我有一段看起来像这样的代码:
连同@EnableJDBCRepositories
在我的@Configuration
文件中,这允许我在 JDBC 中本地执行自定义查询。
现在,我需要的是替换它
像这样:
.properties"query.one"
文件中属性的占位符在哪里,如下所示:
我怎么能做到这一点?
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 创建脚本
例外
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
仍然没有运气。
我的自定义监听器在这里
}
java - spring-data-jdbc 中是否有相当于@BatchSize
嗨,我使用 spring 数据来映射我的实体和存储库。映射非常简单:
我使用我的 spring 数据存储库的 findAllByIds(Iterable) 接口。它会以以下形式生成一个不错的 sql:
对于每辆 Car,它只执行一个 SQL。
我的问题从获取相关部分开始。它似乎正在一一获取它们。spring data jdbc 中是否有与 hibernate 中的批量获取等效的东西?
如果分析器是否定的,是否有一些相对简单的方法来实现它?
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 的版本。但是控制台向我显示了一个问题。
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 =?
我在这里缺少什么?编辑:忘记添加,如果列表在根聚合中,它工作正常。
java - 复合键和 spring-data-jdbc
我有一个使用复合键的数据库。是否可以使用 spring-data-jdbc?我尝试了里程碑版本 1.1M2,其中我以以下方式映射了我的实体:
然后在我的存储库类中,我添加了
我跟踪了SQL,它没有工作。嵌入部分有效,但 where 子句不正确。它使用单个参数保持器,而不是使用常规的复合键结构,其中 element1=subkey1 和 element2=subkey2 等等......
我有两个问题。有什么方法可以使复合 ID 工作?
第二个问题是,假设我在 SAVE 方法的基础@Query
上使用了一个自定义findByID
,如果之后,SAVE 方法会起作用吗?什么是根本没有ID,如果我只是随机选择一个列并说你将成为我的ID怎么办?
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 实现相当于:
spring-data - 我可以使用 spring-data-jdbc 进行分页吗?
我想将 PagingAndSortingRepository 与 spring-data-jdbc 一起使用,但它似乎不起作用。它仅适用于 JPA 吗?
我尝试使用 PagingAndSortingRepository 并使用 findAll(Pageable pageable)。
但我实际上得到一个“在 findAll 上没有指定查询”