java - 如何使用 hibernate 管理具有多个数据库角色(用户)的 web 应用程序?

标签 java hibernate postgresql jakarta-ee

如何处理这样的情况:我们有一个运行多个数据库角色(代表用户)的 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 命令,就像您一开始就使用该角色登录一样。

Here is a link to the Postgres documentation.

关于java - 如何使用 hibernate 管理具有多个数据库角色(用户)的 web 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36270222/

相关文章:

java - 在带有数据库的单元/集成测试中仅加载 Spring Boot 数据/JPA 层

java - 无法将带有连字符的 JSON 字段映射到 Java 对象字段

java - JMeter 将结果保存到文件

php - 我在哪里可以找到 RedHat 7 的 php-pgsql 包?

database - PostgreSQL 唯一索引和字符串大小写

sql - pl/pgsql 中的引用

java - springboot + hibernate + javaFX

java - 类型 "YEAR"的 MySQL 到 Hibernate 数据类型映射

hibernate - 使 hibernate save() 和 update() 作为单个插入优化

java - 在 JPA QL 中,如何按项目类别选择所有国家/地区?