mysql - 是否可以在 Java 代码中实现数据库 'trigger'? (hibernate + jpa + spring + mysql)

标签 mysql hibernate jpa triggers

我正在使用 mysql 5.5 DB,hibernate.4.0 作为 spring 3.0.5 的 jpa 提供程序。

我的数据库中有一个user 表和一个privilege 表。我的数据库中也有一些触发器。这些触发器实现了我们应用程序的一些业务逻辑。

例如,用户 john 通过我的网络应用程序将一条记录插入到表 table_foo 中。

  1. 触发器BeforeInsertTableFoo 将检查用户的权限。如果用户没有权限,触发器将中止此操作。
  2. 此外,如果允许该操作,另一个触发器 AfterInsertTableFoo 将更新表 table_bar 中的一些记录。

有什么方法可以在 Java 代码中将此逻辑实现为“触发器”?好像Jpa Event Listener和Hibernate Event只能在一个表中做类似trigger的事情。

我当然可以使用 java 类来做同样的事情。但是当业务规则的数量增加时,我无法确保所有其他开发人员,甚至我自己,都会使用正确的 java 类来执行数据库插入或更新。

提前致谢。 安德鲁

最佳答案

更仔细地检查 JPA 的监听器。您可以为许多实体/表创建一个监听器。

只需像这样设置一个监听器类:

public class MyListener {
@PrePersist void onPrePersist(Object entity ) {}
@PostPersist void onPostPersist(Object entity) {}
@PostLoad void onPostLoad(Object entity) {}
@PreUpdate void onPreUpdate(Object entity) {}
@PostUpdate void onPostUpdate(Object entity) {}
@PreRemove void onPreRemove(Object entity) {}
@PostRemove void onPostRemove(Object entity) {}

然后,对于您想要回调或“触发”的所有实体......

@Entity @EntityListeners(MyListener.class)
   public class Customer {
    }

希望对您有所帮助。

-亚历克斯

关于mysql - 是否可以在 Java 代码中实现数据库 'trigger'? (hibernate + jpa + spring + mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7642724/

相关文章:

PHP/MySQL 随机无法解析正确的日期时间

java - Hibernate 不在反面缓存我的 OneToOne 关系

java - Hibernate 映射有时会停止工作

java - Hibernate - 通过更新父对象创建子对象,但需要生成子对象的 key

mysql - 我是否必须按顺序列出所有列并在 INSERT 语句中为每一列设置值?

php - 为什么我的 MySQL Group By Hours vs Half Hours 文件不显示相同的数据?

mysql - 通过集群重启使用持久卷为MySQL pod持久化数据

java - Hibernate可以将空字符串默认为空字符串吗

java - 不太明白如何使用 Hibernate 正确删除字段

java - 即使未定义 `queryResultList`,JPA 也会限制 `setMaxResults`