gpt4 book ai didi

java - Spring数据库触发器

转载 作者:行者123 更新时间:2023-12-02 05:23:59 25 4
gpt4 key购买 nike

在我的 spring 项目中,我使用 @Entity 注释并让 hibernate 自动创建数据库表。现在我的数据库需要一些触发器。由于您无法将让 Hibernate 创建架构和通过 schema.sql 初始化架构结合起来,我不知道如何创建数据库触发器。我无法在 schema.sql 中创建触发器,因为该表是由 hibernate 之后创建的。由于我不想重写整个项目,我想知道如何在 JAVA 级别上创建数据库触发器。专业的方法是什么?如果您能提供一个简单的代码示例就太好了

我尝试了@EntityListener,但你无法注入(inject)crudrepositories,这个选项可能不是最好的。这就是我寻找其他解决方案的原因。

最佳答案

如果您绝对确定触发器是您所需要的,则有多种选择。

首先,没有“Java 方式”来创建触发器,至少我不知道。你可以实现类似 this 的东西虽然如此,但这比简单地在 SQL 语句文件中维护触发器定义并在需要时应用它们要复杂得多。

二、为什么需要用Spring创建触发器?触发器只不过是代表封装某些业务逻辑的代码。因此,将它们维护在单独的 SQL 文件中并在触发器的代码更新时应用它们可能是一个好主意。如果您正在寻找的是自动应用它们,您可以寻找类似 Liquibase 的工具。这使得这些类型的自动化任务成为可能。

如果您坚持使用 Spring 应用触发器,那么您可以考虑使用 automatic database initialization provided by Spring ,它可以自动运行包含DDL/DML语句的SQL文件。例如,如果您使用 MySQL,则 Spring src/main/resources 文件夹下可能有名为 schema-mysql.sql 的文件,其中包含触发器定义。请注意,这将每次应用程序启动时执行 SQL 文件,因此您必须使用数据库的具体语句来控制此类情况,例如 DROP TRIGGER IF EXISTS my_trigger;以 MySQL 为例。

根据我过去的经验,每当我们需要使用触发器时,我们只需将它们维护在单独的 SQL 文件中,并使用 Liquibase 自动应用它们,但这种情况很少见,因为使用触发器会使您与数据库供应商高度耦合,这会带来到表中其他类型的问题。

关于java - Spring数据库触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56244726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com