在jpa中将持久性上下文设置为只读

Posted

技术标签:

【中文标题】在jpa中将持久性上下文设置为只读【英文标题】:setting persistence context to read-only in jpa 【发布时间】:2010-09-17 11:51:41 【问题描述】:

我们将使用旧数据库。 因此,在任何情况下(来自报告模块)都不要修改数据库/表/模式非常重要,因此我想将一些持久性单元设置为只读的持久性上下文(用于报告模块) ,还有一些像正常的 JTA 一样启用。

我们已经考虑过创建两个帐户以在这些持久性单元中使用,一个将被授予只读访问权限,另一个将具有读写访问权限。

我想知道我们是否可以使用 persistence.xml 文件做一些更简单的事情,或者可能在 JDBC 驱动程序级别,以便我与数据库的连接基于持久性选择性地只读和读写-单位活跃。或正在使用的数据库驱动程序 url...我们使用 SQL-Server 作为数据库服务器...如果这有帮助的话。

【问题讨论】:

【参考方案1】:

据我所知,标准 JPA 中不支持此功能(除了使用具有受限数据库连接权限的用户)。但您的 JPA 提供者可能支持:

只读实体(例如,带有 ElipseLink @ReadOnly 或 Hibernate @Immutable 注释) 通过提示进行的只读查询(例如,对于 EclipseLink,eclipselink.read-only 设置为 true,对于 Hibernate,org.hibernate.readOnly 设置为 true)。

我检查了 Microsoft JDBC 驱动程序的 connection properties,但没有发现任何有用的信息。

PS:EclipseLink (Bug 282595) 有一个待定的增强请求,以提供对只读EntityManager 的支持。你可能想投票给它。

【讨论】:

以上是关于在jpa中将持久性上下文设置为只读的主要内容,如果未能解决你的问题,请参考以下文章

为啥需要在执行修改查询之前清除 jpa 持久性上下文?

JPA 中的哪些操作绕过持久性上下文/缓存并直接在数据库中调用?

Tomcat 7 SEVERE:在 pom 中将 spring-data-jpa 添加到依赖项后,由于先前的错误,上下文 [] 启动失败

什么是持久性上下文?

在Java Spring中将一个bean的值设置为另一个bean

jpa 合并非托管实体