【发布时间】:2016-02-22 21:31:32
【问题描述】:
我有一个同时运行 EJB 和 Spring 代码的 JBoss 6 应用程序(此决定涉及一些遗留问题)。它应该按需与 Oracle 和 PostgreSQL 数据库通信。 JPA 是完成数据库操作的方式,不涉及直接的 JDBC。
我想做以下事情:在不改变业务逻辑的情况下,能够从我的应用程序中“静默”数据库更新/删除,而不会中断任何异常流程。
我目前的想法是:
- 从部署描述符中将 JDBC 驱动程序设置为只读 - 这仅适用于 PostgreSQL(Oracle 驱动程序不支持此)
- 在 RDBMS 级别上创建一个只读用户 - 这可能会让我充满错误
- 让所有事务回滚而不是提交 - 这可能吗?
- 让实体管理器永远不会保留任何东西 - 将 FlushMode 设置为 MANUAL 并确保永远不会调用 flush() - 但 commit() 仍然会刷新所有内容。
还有其他简洁的方法吗?
【问题讨论】:
-
我能想到的一种(相当复杂的)方法:使用
instead of触发器为每个表创建视图,该触发器会忽略所有更改。 -
有什么目的呢?告诉用户他们在尚未持久化的情况下成功输入了一些数据似乎是一个问题,分配主键和其他任何需要数据库更新才能运行的东西也是如此。一种可能性是编写您自己的事务管理器,它可以检查您所处的模式并根据模式使用回滚覆盖提交。序列可以在操作事务之外使用,因此在需要时仍然可以使用。
-
a_horse_with_no_name 你的方法对我来说似乎是一个赢家。我创建了一个具有与原始用户表同名的视图的用户。现在我只需要在运行时动态更改数据源用户,这并非易事......仍在寻找解决方案。
标签: oracle postgresql jpa jdbc jta