我正在将 Spring Boot 2.6.9 应用程序升级到 2.7.x 行 (2.7.1)。应用程序测试使用 H2 和 MS SQL Server 兼容模式。
我创建了一个简单的示例项目来重现此问题:https://github.com/codependent/boot-h2
分支:
要检查行为,只需运行< code >。/mvnw干净测试
这些是代码的相关部分:
测试应用程序.yml
spring:
r2dbc:
url: r2dbc:h2:mem:///testdb?options=MODE=MSSQLServer;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
schema.sql
CREATE SCHEMA IF NOT EXISTS [dbo];
CREATE TABLE IF NOT EXISTS [dbo].[CUSTOMER] (
id INTEGER GENERATED BY DEFAULT AS IDENTITY,
name VARCHAR(255) NOT NULL,
CONSTRAINT PK__otp__D444C58FB26C6D28 PRIMARY KEY (id)
);
实体
@Table("[dbo].[CUSTOMER]")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CustomerEntity {
@Id
@Column("id")
private Integer id;
@Column("name")
private String name;
}
数据R2DBC存储库
public interface CustomerRepository extends ReactiveCrudRepository<CustomerEntity, Integer> {
}
调用< code > customer repository . find byid(XXX)时出现问题,如以下测试所示
@SpringBootTest
@RequiredArgsConstructor
@TestConstructor(autowireMode = ALL)
class BootH2ApplicationTests {
private final CustomerRepository customerRepository;
@Test
void shouldSaveAndLoadUsers() {
CustomerEntity joe = customerRepository.save(new CustomerEntity(null, "Joe")).block();
customerRepository.findById(joe.getId()).block();
例外:
Caused by: io.r2dbc.spi.R2dbcBadGrammarException:
Syntax error in SQL statement "SELECT [dbo].[CUSTOMER].* FROM [dbo].[CUSTOMER] WHERE [dbo].[CUSTOMER].id = $1 [*]LIMIT 2"; SQL statement:
SELECT [dbo].[CUSTOMER].* FROM [dbo].[CUSTOMER] WHERE [dbo].[CUSTOMER].id = $1 LIMIT 2 [42000-214]
R2dbcEntity模板
将选择一个查询限制为2个元素:
public <T> Mono<T> selectOne(Query query, Class<T> entityClass) throws DataAccessException {
return (Mono)this.doSelect(query.getLimit() != -1 ? query : query.limit(2), entityClass, this.getTableName(entityClass), entityClass, RowsFetchSpec::one);
}
这被转换为 H2/SQL Server 不支持的 LIMIT N 子句。
不知道这是不是某种H2/Spring的数据错误,或者有办法解决这个问题。
它将在Spring Data 2.4.3(2021.2.3)中解决
我试图用H2测试我的JPA原生@查询。我的原生查询如下: 在编写单元测试时,我得到以下H2错误: 原因:org.h2.jdbc.jdbcsqlexception:找不到表“accounts”;SQL语句:从'aws_account_name'喜欢LOWER(CONCAT(“%”,COALESCE(?,“”),“%”))限制的帐户中选择*?[42102-197] 我可以通过更改SQL语法将表名置于双
问题内容: 我的“其他”有两个错误,我不知道该怎么办。他们被标记为评论!!导入了“ Punto”和“ Cuadrante”。还有一个枚举。 问题答案: 您可以使用if and else if实现您想要的 如果有的话,您可以拥有更多。 您当前的代码缺少一些右括号,这会导致您所拥有的错误,并且可以通过以下方式修复: 另一种/更好的方法是:
扫描器输入=新扫描器(System.in); }
使用spring我有这个endpoint, 带有日期字段的对象的Spring验证失败
我有两个简单的Flink流式作业,从Kafka读取,做一些转换,并将结果放入Cassandra sink。他们从不同的Kafka主题阅读,并存入不同的卡桑德拉表。 当我单独运行这两个工作中的任何一个时,一切都很好。检查点被触发并完成,数据被保存到Cassandra。 我找不到关于这个错误的很多信息,它可能是由下列任何一个引起的: Flink(V1.10.0-Scala2.12), Flink Ca
问题内容: 尝试拉出microsoft / nanoserver映像时遇到以下错误。下载成功。在提取图像期间会发生此错误。 482ab31872a2:下载失败,无法完成注册层:重新执行错误:退出状态1:输出: 在Win32中无法成功 打开 OpenForBackup :打开\?\ C:\ ProgramData \ Docker \ windowsfilter \ 07bd46b89b4520e9