如何处理这样的情况:我们有一个运行多个数据库角色(代表用户)的 Postgres 数据库,并且想要使用 hibernate,以便每个数据库语句都将使用与特定用户获取的连接来执行?
要获取 Session
/EntityManager
,我们需要从 EntityManagerFactory
获取它,这需要数据库用户/密码,通常在persistence.xml
像这样:
<property name="javax.persistence.jdbc.user" value="SYSDBA"/>
<property name="javax.persistence.jdbc.password" value="masterkey"/>
当然,我可以使用单独的EntityManagerFactory
为每个用户创建一个Session
/EntityManager
,但这是一项成本高昂的操作。如何解决这个问题?
最佳答案
如果 RDBMS 是 PostgreSQL,我认为实现此目的的最佳方法是调用 SET ROLE
命令。此命令会将角色和权限更改为指定的任何角色。它将在 session 期间执行所有 SQL 命令,就像您一开始就使用该角色登录一样。
关于java - 如何使用 hibernate 管理具有多个数据库角色(用户)的 web 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36270222/