我在Oracle 11g中使用Hibernate
。使用10g的代码不能与11g一起使用,因为hibernate将用户名的情况从example:admin更改为ADMIN。默认情况下,Oracle 11g会创建区分大小写的用户名和密码。在实现我的代码之前,我已经创建了用户和很多对象:
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/AdminDS");
Connection con = ds.getConnection();
连接不起作用,因为数据库中的用户名是小写的admin,而hibernate将其转换为大写ADMIN。
我尝试过多种方法....包括使用小写用户名,密码创建连接;例如,ds.getConnection(“admin”,“password”)....没有骰子......关于如何将用户名转换为小写的任何想法,因为在部署时......
答案 0 :(得分:3)
默认情况下,Oracle的任何版本都不会创建区分大小写的用户名。您始终(至少在过去的15 - 20年中)能够创建区分大小写的用户名,但在创建用户名时必须将用户名括在双引号中。像
这样的东西SQL> create user "MyCaseSensitiveUser" ...
假设您在11g数据库中运行了与10g中相同的DDL,这意味着您没有在CREATE USER
语句中的用户名周围添加双引号,并且用户名不是,事实上,区分大小写。
在11g中,Oracle确实开始默认使用区分大小写的密码。因此,我认为问题是从Hibernate传入的密码没有使用正确的外壳。您可以通过更改SEC_CASE_SENSITIVE_LOGON
初始化参数来禁用数据库中的区分大小写的密码,还原为10g行为。希望更熟悉Hibernate的人可以建议如何让Hibernate以区分大小写的方式向数据库发送密码。
答案 1 :(得分:0)
这看起来似乎是一个愚蠢的答案,但是当我遇到这个问题时,我只是将密码更改为全大写密码并且它有效。不是我理想的解决方案......