我将Hibernate
与Oracle 11g一起使用。使用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")。。。。没有骰子。。。。关于如何将用户名转换为小写的任何想法,因为在部署时。。。。
默认情况下,Oracle的任何版本都不会创建区分大小写的用户名。你一直(至少在过去的15-20年里)能够创建区分大小写的用户名,但在创建用户名时必须用双引号括起来
SQL> create user "MyCaseSensitiveUser" ...
假设您在11g数据库中运行了与10g中相同的DDL,这意味着您在CREATE USER
语句中没有在用户名周围添加双引号,而且用户名实际上不区分大小写。
在11g中,Oracle确实开始默认使用区分大小写的密码。因此,我认为问题在于从Hibernate传入的密码没有使用正确的大小写。通过更改SEC_CASE_SENSITIVE_LOGON
初始化参数,可以在数据库中禁用区分大小写的密码,恢复到10g行为。希望更熟悉Hibernate的人能够建议如何让Hibernate以区分大小写的方式向数据库发送密码。
这似乎是一个愚蠢的答案,但当我遇到这个问题时,我只需将密码更改为全大写密码,就可以了。不是我理想的解决方案。。。