H2是用Java编写的关系数据库管理系统。它可以嵌入Java应用程序中,也可以在客户端 - 服务器模式下运行。 H2支持常规的基于磁盘的数据库以及内存数据库。
我有一个类型为 TEXT ARRAY 的 H2 列。 创建表 app.worklist ( id 整数, 专业文本数组 ); 我想查询是否有任何数组元素与 LIKE 参数匹配。 以下是...
如果您在使用 Liquibase 时尝试执行脚本在 H2(面向 PostgreSQL 的上下文)上创建功能索引,则会出现可疑错误。 脚本本身如下所示: 如果您在使用 Liquibase 时尝试执行脚本以在 H2(面向 PostgreSQL 的上下文)上创建功能索引,则会出现可疑错误。 脚本本身如下所示: <changeSet id="2" author="..."> <createIndex tableName="test_table" indexName="test_table_id_idx"> <column name="(date_trunc('day', create_date))"/> </createIndex> </changeSet> 错误信息: Syntax error in SQL statement "CREATE INDEX TEST_TABLE_ID_IDX ON TEST_TABLE(([*]DATE_TRUNC('day', CREATE_DATE)))"; expected "identifier"; SQL statement: CREATE INDEX test_table_id_idx ON test_table((date_trunc('day', create_date))) [42001-200] GitHub 上的 PoC 说实话,我不知道这样一个奇怪的脚本补充是从哪里出现的(关于这个[*])。也许 H2 不明白你需要使用哪个字段并替换 Vilcard 或类似的东西。 是的,我知道 H2 和真实 PostgreSQL 的实现中可能存在冲突和差异(如果那样的话,PostgreSQL 脚本执行正确),但我想了解是什么导致了脚本的这种变化。 H2 的错误消息中的[*] 标记了发现语法错误的位置。 H2 不支持表达式索引,只能对列建立索引。 H2 支持计算列上的索引,因此可以使用函数添加计算列,为其建立索引,并在查询中使用此计算列而不是基列上的函数,在这种情况下可以使用此索引。但我认为如果你的主数据库系统是 PostgreSQL,那不是你的本意。如果您仅将 H2 用于某些测试,则从 H2 的变更集中删除此类不兼容索引的创建更为合理。 使用 计算:正确 databaseChangeLog: - changeSet: dbms: postgresql changes: - createIndex: tableName: test_table indexName: test_table_id_idx columns: - column: **computed: true** name: ((create_date)::date)
如何在 Play Framework 2.4 中使用相对于项目根目录的路径来进行 H2 数据库文件配置?
我们正在开发 Play 2.4 应用程序(Java API)。 出于开发目的,我们希望使用持久性 H2 数据库,其数据库文件路径相对于项目根目录。 在如何使用持久...
我使用H2进行集成测试,使用spring与kotlin,jpa + hibernate。 我的代码中的模型有一个带有 columnDefinition = "JSON" 的字符串字段,这会导致 H2 出现问题。 导入j...
使用 SQL 和内部加密数据库在 Java 应用程序中实现安全用户帐户同步的最佳方法?
我正在开发一个 Java 应用程序,该应用程序具有 Angular 前端和基于 Java 的后端,该后端将连接到 SQL 数据库以进行一般数据存储。此外,我计划包括一个内部加密......
我们正在将项目从 Spring Boot 2.7 升级到 3.3.5,其中包括升级到 Hibernate 6。在生产中,我们使用 PostgreSQL,在本地开发中,我们使用 H2。 我们的
无法生成 org.h2.jdbcx.JdbcConnectionPool 类的 CGLIB 子类
问题: 我正在执行一个依赖项迁移任务,试图将 Spring 代码库从 Spring 2.6.9 迁移到 Spring 2.7.0。但是,我面临一些与迁移 H2 相关的问题。 我读了
这是我的sql脚本: -- 为工具租赁项目创建内存数据库。 -- 预计将替换为实际数据库 -- -- 创建Schema以供使用 如果不存在则创建架构
CREATE TABLE "INFO" ("ID" BIGINT NOT NULL PRIMARY KEY AUTO_INCRMENT[*], "OWNER" VARCHAR(255) NOT NULL)"; 预期为“HASH、CONSTRAINT、COMMENT、UNIQUE、NOT、N...
无法使用Spring-Data-JPA将数据保存到表(H2数据库)
我使用H2数据库版本2.2.224和Spring-Data-JPA版本3.3.3。我在“USERS”和“ROLES”表之间有多对多关系。 当我尝试保存“Ent...
我刚开始学习Spring,有一些东西不太清楚。 我的 pom 是这样完成的: 我刚开始学习Spring,有一些东西不太清楚。 我的 pom 是这样完成的: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 当我启动应用程序时,抛出以下错误: 应用程序无法启动 描述: 配置数据源失败:未指定“url”属性,无法配置嵌入数据源。 原因:未能确定合适的驱动程序类别 行动: 考虑以下因素: 如果您想要嵌入式数据库(H2、HSQL 或 Derby),请将其放在类路径中。 如果您有要从特定配置文件加载的数据库设置,您可能需要激活它(当前没有活动配置文件)。 如果我添加此依赖项: <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> 然后应用程序就可以运行了 我想了解 Jpa 是否需要 h2 才能工作,因为在许多示例中我看到通常不会添加此依赖项来使应用程序工作。 我检查了项目属性 --> Java 构建路径 --> 源(选项卡)--> 构建路径上的源文件夹 我注意到,在项目属性 --> Java 构建路径 --> 源(选项卡) --> 构建路径上的源文件夹中,在 src/main/resources 中,排除的项目标记为 **。 我删除了它,现在一切正常。 如果您使用 Spring starter 并且没有在 pom.xml 中指定任何特定数据库,那么 Spring Data 将为您配置默认的 H2(内存中)数据库。您不需要将 h2 工件放入 pom.xml 中。 但是在您的 pom.xml 中已经添加了 MySql 工件。在这种情况下,您必须告诉 Spring JPA 应该使用哪个数据库。例如,通过在 application.properties 中添加数据源详细信息。 如果您决定使用 MySQL,那么 pom.xml 中的工件将是: <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> application.properties 中的数据源定义为: spring.datasource.url=jdbc:mysql://localhost:3306/<some_db_name> spring.datasource.username=<some_username> spring.datasource.password=<some_password> spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 要让 Spring Data 在启动期间从实体类创建/更新数据库,请使用以下属性: spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto=update 如果您想从 DDL 脚本创建数据库并从脚本文件插入一些数据 - 请使用以下属性: spring.jpa.hibernate.ddl-auto=none spring.sql.init.mode=always Spring 将使用位于类路径(默认)上的默认脚本 schema.sql 和 data.sql。更详细的 Spring 文档:https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.data-initialization.using-basic-sql-scripts
保存 Arena 数据时出现 Hibernate 异常(不存在具有给定标识符的行)
这是我第一次将 Hibernate ORM 集成到我的项目中,并且在尝试调试 org.hibernate.UnresolvableObjectException: No row with the给定标识符存在时遇到了一些麻烦
使用H2数据库(版本1.4.200)我在CTE内使用窗口函数时遇到了非常奇怪的错误。当我将窗口函数字段包含到 CTE 中并且 OVER() 子句为空时,它可以工作
我正在使用 Spring Boot 1.4.1 和 H2 数据库。 我已按照参考指南中的说明启用了 H2 控制台,方法是将以下几行添加到我的 application.properties 文件中: spring.h2.cons...
我正在使用 Java、Spring boot 和 H2 DB 以及 Data JPA 制作一个新的待办事项列表后端应用程序。我正在尝试插入新记录,但无法这样做,因为它正在检测重复的主/唯一键...
Spring 启动测试用例失败 - java.lang.IllegalStateException: 无法加载 ApplicationContext
我是 Spring Boot 新手,我正在使用 Spring Boot 3.2.8。我在调试存储库测试时遇到了困难。测试及其组件中的应用程序上下文似乎有问题...
我正在尝试在测试中使用 H2 数据库在 Spring Boot api 上运行测试,但是,当尝试运行测试时,系统使用主资源中的 application.properties 而不是...
我有两个正在运行的 docker 容器,一个带有 Tomcat,一个带有 H2 数据库。 为了构建容器,我使用 docker compose build 和以下 compose.yml: 服务: 雄猫: 构建:t...
我尝试使用 Intellij 社区版创建内存中的 H2 数据库。 以下是POM.xml中的依赖 我尝试使用 Intellij 社区版创建内存中的 H2 数据库。 以下是POM.xml中的依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> 但是,当我运行代码时,我收到一条错误消息,指出数据库为空。 以下是我尝试将其对象保存在数据库中的类: @Entity @Table(name = "A") class Coffee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private String id; @Column(nullable = false,columnDefinition = "TEXT") private String name; public A(String name){ this.name = name; } public A() { } public String getId(){ return id; } public String getName(){ return name; } public void setName(String name){ this.name = name; } public void setId(String id){ this.id = id; } } 以下是一个简单的休息控制器,用于从数据库保存和检索 @Repository interface ARepository extends CrudRepository<A,String> {} @RestController @RequestMapping("/initial") class DBSample { @Autowired private final ARepository zrepository; RESTApiDBController(ARepository zRepository) { this.zRepository = zRepository; this.zRepository.saveAll(new A("a"),new A("b"), new A("c")); } } 但是,我遇到了例外: 原因:org.hibernate.exception.SQLGrammarException:无法准备语句[找不到表“A”(此数据库为空); SQL语句: 插入(名称,id)值(?,默认)[42104-224]] [插入(名称,id)值(?,默认)] 以下是我的application.properties文件 spring.application.name=database # H2 database configuration spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= # Enable automatic table creation spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect # H2 console (optional, for manual inspection) spring.h2.console.enabled=true spring.h2.console.path=/h2-console spring.jpa.hibernate.ddl-auto=update 不创建表,它期望它们已经存在。 如果您希望 Spring Jpa 为您创建 A 表,可以使用 spring.jpa.hibernate.ddl-auto=create每次都尝试创建它 或者更好的是,在开发阶段,使用: spring.jpa.hibernate.ddl-auto=create-drop,以便在应用程序关闭时创建表并删除表。 并不是说,对于生产,您应该使用 spring.jpa.hibernate.ddl-auto=update 并已为应用程序预先配置了数据库。
几周前我提出了一个关于“如何将数据库嵌入到Java中”的问题。 感谢你,我成功地用 H2 db 做到了这一点。我制作了一个简单的应用程序,您可以在插入时插入姓名......