Oracle 在Hibernate建立连接期间,如何将用户名传递给DB连接?

Oracle 在Hibernate建立连接期间,如何将用户名传递给DB连接?,oracle,hibernate,spring-mvc,jboss,Oracle,Hibernate,Spring Mvc,Jboss,我需要将当前记录的用户名传递给DB连接,因为我想跟踪用户更改并使用正确的用户名将其存储在Oracle DB中。我在JBoss5.1和Oracle 11g数据库上使用Hibernate 我想我需要这样做(): 试试看{ 字符串e2eMetrics[]=新字符串[OracleConnection.END_TO_END_STATE_INDEX_MAX]; e2eMetrics[OracleConnection.END_TO_END_CLIENTID_INDEX]=System.getProperty(

我需要将当前记录的用户名传递给DB连接,因为我想跟踪用户更改并使用正确的用户名将其存储在Oracle DB中。我在JBoss5.1和Oracle 11g数据库上使用Hibernate

我想我需要这样做():

试试看{
字符串e2eMetrics[]=新字符串[OracleConnection.END_TO_END_STATE_INDEX_MAX];
e2eMetrics[OracleConnection.END_TO_END_CLIENTID_INDEX]=System.getProperty(“user.name”);
(OracleConnection)conn.setEndToEndMetrics(e2eMetrics,(short)0);
}捕获(SQLException sqle){
//做点什么。。。
}
问题: 问题是我不知道如何/在何处调用它来向连接传递一些值。我的意思是在哪里,在什么时候我应该注入这段代码,因为我使用的是hibernate和EntityManagerFactory,并且我没有手动创建连接,所以我没有访问连接对象本身的权限。我只需要为整个用户连接调用一次,并在连接释放后删除用户名

预期目标: 我的目标是将字符串(实际用户名)从java代码或hibernate配置传递给Oracle DB,该字符串位于
v$session
表的“client_info”列下,在hibernate建立连接之后/期间

我知道这个值可以通过过程传递,我甚至用下面的代码检查了它,但主要的问题是如何在hibernate中建立连接时对整个连接只调用一次

将值传递到
v$session
表的“客户信息”列的工作测试:

@覆盖
@交易的
公共void setDBClientInfo(字符串clientInfo){
试一试{
Query Query=em.createNativeQuery(“{call SYS.dbms\u application\u info.set\u client\u info(:userName)}”)
.setParameter(“用户名”,clientInfo);
query.executeUpdate();
}捕获(例外e){
e、 printStackTrace();
}
}
我的配置: spring-servlet.xml:


persistence.xml:


jdbc/MyNameDS
com.mydomain.model.Assignment
com.mydomain.model.AuditLog
com.mydomain.model.Person
com.mydomain.model.Trial
com.mydomain.model.conflication
启用\u选择性

可以通过hibernate配置或Java代码执行吗


请帮我解决这个问题。

这听起来不是个好主意。我不想让每个用户都可以访问我的数据库。如果您想跟踪用户,为什么不创建一个审计表呢?我有一个现有的审计日志表,但sql过程会检测到其中的更改。我所需要做的只是将用户名传递给
v$session
,sql过程将执行rest(跟踪更改已经实现)。我仍然认为将用户凭据传递给底层数据库是个坏主意,但我确实发现: