我正在使用mysql 5.5 DB,hibernate.4.0作为jpa提供者来弹出3.0.5。
我的数据库中有一个user
表和privilege
表。我的数据库中也有一些触发器。那些触发器实现了我们应用程序的一些业务逻辑。
例如,用户john
通过我的网络应用程序将记录插入表table_foo
。
BeforeInsertTableFoo
将检查用户的权限。如果用户没有该权限,则触发器将中止此操作。 AfterInsertTableFoo
将更新表table_bar
中的某些记录。有没有什么办法可以在java代码中将此逻辑实现为'trigger'?似乎Jpa Event Listener和Hibernate Event只能在触发器中执行某些操作,但只能在一个表中执行。
当然,我可以使用java类来做同样的事情。但是,当业务规则的数量增加时,我无法确保所有其他开发人员,甚至我自己都会使用正确的java类来进行数据库插入或更新。
提前谢谢。 安德鲁答案 0 :(得分:2)
更仔细地检查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 {
}
我希望这会有所帮助。
-Alex
答案 1 :(得分:0)
我在google上找到了一些链接,其中讨论了Spring managed event listeners with JPA