Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle JDBC连接到错误的用户_Oracle_Hibernate_Jdbc - Fatal编程技术网

Oracle JDBC连接到错误的用户

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

我正在使用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连接,则与用户的连接似乎是正确的

用于创建用户的语句:

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。