在mose项目中,使用schema验证运行java app
的方法是使用该配置(当使用spring时):
spring.jpa.hibernate.ddl-auto=validate
我遇到了一个问题,我需要在运行过程中的特定时间验证我的模式,有什么方法可以实现吗?
我看到hibernate用AbstractSchemaValidator
管理它,我用spring和hibernate,我没有找到任何如何处理它的信息,
我找到的唯一的东西是How to validate database schema programmatically in hibernate with annotations?,但它在旧版本的spring-boot
中被删除了
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
有什么主意吗?
3条答案
按热度按时间vhmi4jdf1#
如果您的用例需要:
如果以上内容适用于您的需求,那么以下是如何进行计划模式验证的示例:
1.来源
1.schema.sql
1.application.yml
1.docker-compose.yml
cetgtptt2#
如果你想让
SchemaValidator
重用项目中已经配置的连接配置和Map信息,而不是为了模式验证而再次定义它们,你应该考虑我的解决方案,这样你就不需要在两个不同的地方维护这些配置。实际上,
SchemaValidator
需要的是Metadata
示例,该示例仅在引导Hibernate时可用。但是我们可以使用Hibernate Integrator API(如here中所述)来捕获它,以便稍后验证它们。(1)创建
SchemaValidateService
,实现Hibernate Integrator API来捕获Metadata
。还要设置一个@Scheduled
方法来在所需的时间验证模式。(2)将
SchemaValidateService
注册到Hibernate此外,该解决方案应该具有更好的性能,因为它不需要每次都创建新的数据库连接来验证模式,因为它可以从现有的连接池中获取连接。
flvtvl503#
当我需要找到一种在测试用例中通过Hibernate验证模式的方法时,我偶然发现了这篇文章。原因是模式是在测试中使用数据库脚本创建的。当我设置以下属性时
在执行create脚本之前,Hibernate会立即报告表不存在。
因此,我需要一种方法在创建模式后对其进行验证。我发现在Hibernate 6.2中引入了
SchemaManager
接口,您可以通过SessionFactory
获得该接口,该接口非常适合此任务。使用以下代码,您可以轻松地验证测试用例中的当前模式: