我正在使用 mysql 5.5 DB,hibernate.4.0 作为 spring 3.0.5 的 jpa 提供程序。
我的数据库中有一个user
表和一个privilege
表。我的数据库中也有一些触发器。这些触发器实现了我们应用程序的一些业务逻辑。
例如,用户 john
通过我的网络应用程序将一条记录插入到表 table_foo
中。
- 触发器
BeforeInsertTableFoo
将检查用户的权限。如果用户没有权限,触发器将中止此操作。 - 此外,如果允许该操作,另一个触发器
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/