Database 通过EJB3.0和JPA存储上次修改数据库行的用户名

Database 通过EJB3.0和JPA存储上次修改数据库行的用户名,database,jpa,ejb-3.0,weblogic,Database,Jpa,Ejb 3.0,Weblogic,我想将上次修改表行的用户名存储为每个表中的一个字段 我有以下设置:用户登录,web层调用一些EJB3.0bean。这些ejbbean创建和修改一些JPA实体。 现在,我希望用户名(来自weblayer)将自动存储到EJB方法调用期间创建或修改的每个JPA实体(和数据库行) 我有这样的表,(即:每个表都有字段修饰符): 我的意思是,我不需要为EJB方法中的每个实体手动设置用户名 您可以通过将username存储到ThreadLocal变量并从JPA实体的EntityListener中的Thread

我想将上次修改表行的用户名存储为每个表中的一个字段

我有以下设置:用户登录,web层调用一些EJB3.0bean。这些ejbbean创建和修改一些JPA实体。 现在,我希望用户名(来自weblayer)将自动存储到EJB方法调用期间创建或修改的每个JPA实体(和数据库行)

我有这样的表,(即:每个表都有字段修饰符):

我的意思是,我不需要为EJB方法中的每个实体手动设置用户名

您可以通过将username存储到ThreadLocal变量并从JPA实体的EntityListener中的ThreadLocal获取username来实现这一点。 然而,这只在您使用本地EJB调用时起作用,它将不适用于跨JVM边界的EJB调用。我希望通过远程EJB方法调用来完成这项工作

这有可能吗


我正在使用WebLogicServer10.3、EJB3.0和EclipseLink JPA。我还想知道这是否适用于其他JPA实现。

您可以在EJB类上使用EJB拦截器(@Around)获取当前用户(使用标准EJB api)并将名称存储在threadlocal变量中。这对于远程和本地调用来说是透明的。

您可以在EJB类上使用EJB拦截器(@Around)获取当前用户(使用标准EJB api)并将名称存储在threadlocal变量中。这将对远程和本地呼叫透明地工作

CREATE TABLE my_table (
  some_data INTEGER,
  modifier VARCHAR(20)
);