春季数据库触发器

时间:2019-05-21 18:52:20

标签: java spring hibernate jpa triggers

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

我尝试了@EntityListener,但是您不能注入crudrepository,此选项可能不是最好的。那就是为什么我在寻找其他解决方案。

1 个答案:

答案 0 :(得分:0)

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

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

第二,为什么需要使用Spring创建触发器?触发器不过是代表封装一些业务逻辑的代码。因此,最好将它们保存在单独的SQL文件中,并在更新触发器的代码时应用它们。如果您要寻找的是自动应用它们,则可以寻找Liquibase之类的工具来启用这类自动任务。

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

根据我过去的经验,每当我们需要使用触发器时,我们只需将它们维护在单独的SQL文件中,然后使用Liquibase自动应用它们,但这在极少数情况下,因为使用触发器将您与数据库供应商紧密地联系在一起,来解决其他问题。