1. 操作系统版本及内核发行版本:
CentOS 7.6–3.10.0-693.el7.x86_64
2. 数据库版本及架构:
数据库架构 单机, 数据库版本为 Release 5.0 22.1.0 revision(28cd72e)
3. 问题描述:
Hibernate适配SUNDB如何实现A,B两个用户查询同一张表的时候select语句中不指定schema_name
4. 问题说明:
Mysql 实现方式:
表属于database而用户时独立于database之外的。
假设表table_test 属于test 数据库,两套应用的业务用户A和 B 执行相同的sql: select * from table_test;
则两套应用只需要用自己的用户连接Mysql 时在 url中指定需要连接database为test 即可。
Mysql 示意图

5. 解决方案:
SUNDB 实现方式:
表属于schema,而schema属于某一个用户。
假设表table_test 属于 schemaB 而 schemaB 属于user B ,两套应用的业务用户A和B 执行相同的sql: select * from table_test ;
B 用户能正常查询到数据而 A 用户会报表和视图不存在,因为 A 用户默认会在自己的schemaA 下寻找表,执行sql相当于 select * from
schemaA.table_test; 但schemaA下并没有table_test 表所以报错。
需要使用hibernate 的 default_schema 设置默认的 schema 为schemaB。
那么应用执行的查询语句就相当于 select * from schemaB.table_test; 无论使用什么用户查询只要确保有足够的权限都能够进行查询。
Hibernate 的配置文件中添加如下配置:
SUNDB 示意图





