我的Web应用程序在Tomcat 7.0上运行,使用Spring 3.2,Hibernate 4.3和Oracle数据库。
entityManagerFactory配置为org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
,transactionManager为org.springframework.orm.jpa.JpaTransactionManager
。 dataSource定义为org.springframework.jndi.JndiObjectFactoryBean
,内部引用类型为org.apache.tomcat.jdbc.pool.DataSourceFactory
的连接池。
每当entityManager从池中获取连接时,我都希望在该连接中执行自定义sql语句。它只会更改Oracle会话上下文中的属性,如下所示:
dbms_session.set_context(context, propName, propValue);
所以没有完成dml。
每次将连接释放回池时,都应执行类似的语句来清除属性值。
属性值应该从spring-security上下文中动态获取,因此我无法将其硬编码为connection test statement。
我也查看了Hibernate interceptors,但我发现无法在拦截器内执行同一会话中的任何sql。
有什么想法吗?