Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 在实体管理器中获取连接时调用本机语句_Jpa_Jakarta Ee_Glassfish - Fatal编程技术网

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

Jpa 在实体管理器中获取连接时调用本机语句,jpa,jakarta-ee,glassfish,Jpa,Jakarta Ee,Glassfish,我的公司正在使用database ONINSERT、ONUPDATE、ONDELETE触发器记录更改,还有一种方法可以通过调用设置数据库会话参数的存储过程来模拟另一个数据库用户。然后,对该连接所做的任何更改都会自动分配给该用户。我知道这是一个糟糕的设计,但我不能改变这一点 现在,我需要确保在EntityManager将更改与数据库同步之前始终调用此存储过程,并且每次模拟的用户都不同。我试着简单地将存储过程调用包装在一个无状态EJB中,并在对实体进行任何更改之前调用该EJB,但在某些情况下,这不起

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

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


有什么干净的方法可以做到这一点吗?

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

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

  • Toplink:

  • 休眠:

  • 日食: