更改域对象的通知(Hibernate / Java)

是否有可用于为Hibernate或任何其他主流O / R映射框架订阅域对象更改的解决方案? 例如,如果我在名为“Apple”的数据库中有一个表,我希望能够说“当任何Apple对象发生更改时通知我”或“任何Apple对象更改时”通知我“颜色”。 当然,我希望不仅仅是“改变了某些东西”的通知,而是一个已更改对象的id列表或已更改对象的列表。 这样的解决方案是可扩展的。

总结要求:

  1. 对数据库的所有更改都将通过ORM
  2. 它应该是一个完整的解决方案,可以使用像“订阅问题q,其中q.title喜欢’%hibernate%’”这样的表达式进行订阅,其中“Question”是一个实体(映射到数据库中的表的Java对象)我对更新感兴趣。 不需要是字符串查询,但应该有一种通用的方式来发出请求。

生成这些通知的所有更改是通过ORM进行的,还是可能通过JDBC或访问同一数据库的其他应用程序更改数据?

如果所有更改都通过ORM并且您正在使用Hibernate,那么您可以使用Hibernate的拦截器和事件 。

另一方面,如果对数据的所有更改都没有通过ORM,并且处理通知的代码非常简单,那么数据库触发器可能是更好的选择。