如何使用hibernate管理具有许多数据库角色(用户)的Web应用程序?

时间:2016-03-28 20:05:50

标签: java hibernate postgresql java-ee

如何处理我们有一个运行多个数据库角色(代表用户)的Postgres数据库并希望使用hibernate的情况,以便使用与特定用户提取的连接执行每个数据库语句?

要获得Session / EntityManager,我们需要从EntityManagerFactory获取它,这需要一个数据库用户/密码,通常在persistence.xml中指定,如下所示:< / p>

<property name="javax.persistence.jdbc.user" value="SYSDBA"/>
<property name="javax.persistence.jdbc.password" value="masterkey"/>

当然,我可以为使用单独的Session的每个用户创建EntityManager / EntityManagerFactory,但这是一项代价高昂的操作。如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果RDBMS是PostgreSQL,我认为实现这一目标的最佳方法是调用SET ROLE命令。此命令将角色和权限更改为指定的任何角色。它将在会话期间执行所有SQL命令,就像您在开始时使用该角色登录一样。

https://msdn.microsoft.com/en-us/library/ee292027(v=vs.118).aspx