【发布时间】:2023-03-25 14:52:01
【问题描述】:
我对数据库视图中的数据可见性有疑问。 我使用甲骨文。 我有一个表 myscheme.users 和一个表 global.users (myscheme 和 global 是方案) 全局方案中有一个视图“globalusers”,它合并了两个用户表。
我有一个在 myscheme.users 表中插入新用户的 java 应用程序。之后,它会在 globalusers-view 中查询新用户以加载新创建的用户。 因为所有这些都发生在同一个事务中。我现在的问题是,为什么新创建的用户在 myscheme.user 表中可见,但在 globalusers-view 中不可见? 当事务关闭时,用户也在 globaluser-view 中。
我的应用程序正在使用休眠的 JBoss 5 中运行。
视图是这样定义的:
CREATE OR REPLACE VIEW V_USERACCOUNT AS
SELECT u.USERACCOUNT_ID,u.USERNAME,u.INITIALS,u.COMMONNAME,u.PASSWORD,'local' AS source
FROM "USERACCOUNT" u
UNION
SELECT u1.USERACCOUNT_ID,u1.USERNAME,u1.INITIALS,u1.COMMONNAME,u1.PASSWORD 'global' AS source
FROM GLOBAL."USERACCOUNT" u1
【问题讨论】:
-
也许对添加 statemets 有用。创建表,创建表创建视图,插入,选择,选择。并解释你看到/发生的事情。
-
您在 useraccount 中进行了插入,之后您在 global.useraccount 中创建了一个副本,然后在 v_useraccount 上进行了选择,您没有看到在 global 中添加了用户?
-
不,我在 global.useraccount 中进行了插入,之后我在 v_useraccount 上进行了选择,并且用户不在结果中
-
正如贾斯汀所说,您可能在另一个会话中进行了选择。
-
好吧,随着代码的深入(这不是我的),我发现还有第二个实体管理器用于处理全局模式。我在 JBoss 中不够深入,但可以是不是两个数据源没有交易?
标签: java oracle hibernate transactions