是否可以在java代码中插入数据库'trigger'? (hibernate + jpa + spring + mysql)

时间:2011-10-04 02:30:35

标签: mysql hibernate jpa triggers

我正在使用mysql 5.5 DB,hibernate.4.0作为jpa提供者来弹出3.0.5。

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

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

  1. 触发器BeforeInsertTableFoo将检查用户的权限。如果用户没有该权限,则触发器将中止此操作。
  2. 此外,如果允许该操作,则另一个触发器AfterInsertTableFoo将更新表table_bar中的某些记录。
  3. 有没有什么办法可以在java代码中将此逻辑实现为'trigger'?似乎Jpa Event Listener和Hibernate Event只能在触发器中执行某些操作,但只能在一个表中执行。

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

    提前谢谢。 安德鲁

2 个答案:

答案 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