Oracle JDBC连接到错误的用户
我正在使用hibernate(3.6.9.Final)和Oracle11g数据库与jdbc(ojdbc6:oracle.jdbc.OracleDriver) 我的连接字符串是jdbc:oracle:thin:@SERVERNAME:1521:ORCL 数据源:com.mchange.v2.c3p0.ComboPooledDataSource 国际奥委会:春季3.0.7.0发布 服务器:Tomcat6 我的问题描述如下: 我在oracle服务器中定义了两个模式(用户) 我的SC和我的旧SC, MY_OLD_SC表示我的应用程序的一个较旧的架构,并具有一个列名称MY_ID的表MY_table MY_SC是我的应用程序的最新架构,也有MY_表,但除了MY_ID列之外,它还有MY_NAME列 当我使用我的_SC用户启动应用程序并在验证时休眠时,我会因以下异常而失败: org.hibernate.hibernate异常:缺少列:MY_OLD_SC.MY_表中的MY_名称 似乎它连接到了错误的模式,即使我验证了我与我的\u SC用户的连接,但只有在我从数据库中删除了我的\u OLD \u SC之后,我才能连接到我的\u SC 这个问题并不一致,有时我可以使用不同的scham,但当它失败一次时,我必须删除数据库中的所有模式,除了我想要使用的模式。 大多数情况下,它发生在我使用新模式的impdp之后,但不仅仅是在impdp之后 请注意,如果我使用sql Developer连接,则与用户的连接似乎是正确的 用于创建用户的语句:Oracle JDBC连接到错误的用户,oracle,hibernate,jdbc,Oracle,Hibernate,Jdbc,我正在使用hibernate(3.6.9.Final)和Oracle11g数据库与jdbc(ojdbc6:oracle.jdbc.OracleDriver) 我的连接字符串是jdbc:oracle:thin:@SERVERNAME:1521:ORCL 数据源:com.mchange.v2.c3p0.ComboPooledDataSource 国际奥委会:春季3.0.7.0发布 服务器:Tomcat6 我的问题描述如下: 我在oracle服务器中定义了两个模式(用户) 我的SC和我的旧SC, MY
CREATE USER username IDENTIFIED BY username
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON USERS;
GRANT conn TO username;
impdb的代码:
./impdp system/pass@orcl remap_schema=org_name:new_name directory=DATA_PUMP_DIR TRANSFORM=oid:n dumpfile=backup.dmp
如果您知道可能存在什么问题,那就太好了,也许我需要以不同的方式创建用户?是什么导致了这个问题
感谢您的提醒我最近在Hibernate 3.3.0中遇到了这个问题。基本上,在验证期间运行的Hibernate数据库元数据扫描程序将拾取与实体定义匹配的任何表,而不管它来自哪个模式,只要它具有对表定义的读取权限(不一定是对表本身的读取权限)。它按字母顺序获取它们,因此,如果您的实体是表
小部件
,目标模式是我的应用程序
,但在另一个应用程序
中有另一个小部件
,则Hibernate将使用另一个应用程序
模式中的一个来验证实体
我在Hibernate的网站上找不到任何官方信息,但确实找到了类似的帖子和文章
您可以使用
hibernate.default\u schema
来设置hibernate要使用的架构。我最近在hibernate 3.3.0中遇到了这个问题。基本上,在验证期间运行的Hibernate数据库元数据扫描程序将拾取与实体定义匹配的任何表,而不管它来自哪个模式,只要它具有对表定义的读取权限(不一定是对表本身的读取权限)。它按字母顺序获取它们,因此,如果您的实体是表小部件
,目标模式是我的应用程序
,但在另一个应用程序
中有另一个小部件
,则Hibernate将使用另一个应用程序
模式中的一个来验证实体
我在Hibernate的网站上找不到任何官方信息,但确实找到了类似的帖子和文章
您可以使用
hibernate.default\u schema
设置hibernate要使用的架构。有一种更简洁的方法可以在服务器启动时将hibernate指向默认架构-使用环境属性。关于java jvm的使用:
-Dhibernate.default_schema=YOUR_SCHEMA
有一种更简洁的方法可以在服务器启动时将hibernate指向默认的schema-use-environment属性。关于java jvm的使用:
-Dhibernate.default_schema=YOUR_SCHEMA
一种解决方案是设置hibernate.default_schema属性以适合您的用户(在持久化单元中或TomaszZ.指出的as env属性)
另一个解决方案是取消用户访问其他模式的权限。由于本质安全问题,也不允许这样做(除非该特定用户需要这样的访问)。一种解决方案是设置hibernate.default_schema属性以适合您的用户(在持久化单元中或TomaszZ指出的环境属性)
另一个解决方案是取消用户访问其他模式的权限。由于本质安全问题,不允许这样做(除非该特定用户需要这样的访问)。谢谢Chris,-Dhibernate.default_schema=MY_user为我解决了这个问题。Hibernate这样做很奇怪。我使用的是3.6.7。谢谢Chris,-Dhibernate.default\u schema=我的用户为我解决了这个问题。Hibernate这样做很奇怪。我用的是3.6.7。