在实体管理器中调用获取连接的本机语句

时间:2011-06-10 10:42:30

标签: jpa java-ee glassfish

我的公司正在使用数据库ONINSERT,ONUPDATE,ONDELETE触发器来记录更改,还有一种方法可以通过调用设置数据库会话参数的存储过程来模拟其他数据库用户。然后,对该连接所做的任何更改都将自动分配给该用户。我知道这是一个糟糕的设计,但我不能改变它。

现在我需要确保在实体管理器与数据库同步更改之前始终调用此存储过程,并且每次模拟的用户都不同。我尝试简单地通过简单地将存储过程调用包装在无状态EJB中并在对实体进行任何更改之前调用该EJB来实现它,但这在某些情况下不起作用 - 它的行为就像从未调用过程一样。我的猜测是,程序是在不同的连接中调用的,而不是发布更改本身,尽管这应该发生在单个事务中。

有没有干净的方法呢?

1 个答案:

答案 0 :(得分:0)

您可以使用EntityListeners。这些必须放在你所有的实体上,所以如果你有很多,也许它不是一个好的解决方案。

否则,您可能需要特定于实现的方式: