![](/img/trans.png)
[英]hibernate.exception.SQLGrammarException: could not extract ResultSet: ORA-00942: table or view does not exist
[英]Hibernate: SQLGrammarException: Could not execute JDBC batch update AND BatchUpdateException: ORA-00942: table or view does not exist
我在mkyong.com中遵循了该教程: http ://www.mkyong.com/hibernate/maven-3-hibernate-3-6-oracle-11g-example-xml-mapping/
但是当我运行文件App.java时,它显示以下日志:
Maven + Hibernate + Oracle
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Hibernate: insert into DB11G.DBUSER (USERNAME, CREATED_BY, CREATED_DATE, USER_ID) values (?, ?, ?, ?)
Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
at com.mkyong.App.main(App.java:22)
Caused by: java.sql.BatchUpdateException: ORA-00942: table or view does not exist
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10070)
at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:213)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 8 more
我什至下载示例代码并将其导入Eclipse,但仍显示日志。
注意:我通过以下方式更改了SID和密码:
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:DB11G</property>
<property name="hibernate.connection.username">mkyong</property>
<property name="hibernate.connection.password">mkyong123</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.default_schema">DB11G</property>
<property name="show_sql">true</property>
<mapping resource="com/mkyong/user/DBUser.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
请帮助我!谢谢。
@kordirko当您在用户名中调用“ mkyong”时,我不明白您的意思“> mkyong是模式,它是模式DB11G中的用户名
在Oracle上,用户等效于架构。 查看定义:
https://docs.oracle.com/cd/B19306_01/server.102/b14220/schema.htm#i22627
模式是数据或模式对象的逻辑结构的集合。 模式由数据库用户拥有,并且与该用户同名 。 每个用户都拥有一个架构。
用户mykong
有一个名为mykong
的shema。 用户DB11G
具有一个名为DB11G
的模式。 mykong
是用户名和架构名。 DB11G
。
您的配置包含以下条目:
<property name="hibernate.connection.username">mkyong</property>
<property name="hibernate.connection.password">mkyong123</property>
这意味着,休眠状态以名为mkyong
的用户身份连接到Oracle数据库,并以名为mkyong
的模式mykong
。
如果您以mykong
身份连接到数据库,则名为mykong
的架构是该用户的默认架构。 如果发出查询SELECT * FROM tablename
,则默认情况下,数据库将在已登录用户的架构中查找名为tablename
的表。
如果以mykong
用户mykong
登录,并且要访问其他用户的表(在其模式中)-例如DB11G
,那么必须在表名前添加一个模式名,例如: SELECT * FROM DB11G.tablename
。
但这仅在用户DB11G
(或系统)将此表上的特权授予用户mykong
!
您的配置还包含此条目:
<property name="hibernate.default_schema">DB11G</property>
此处说明了此选项的含义: https : //docs.jboss.org/hibernate/stable/core.old/reference/en/html/configuration-optional.html
hibernate.default_schema
在生成的SQL中使用给定的架构/表空间来限定不合格的表名。 例如。 SCHEMA_NAME
上面的意思是,Hibernate将在所有查询引用的所有对象之前加上前缀DB11G.
-这是模式DB11G
的名称, DB11G
拥有该模式的用户DB11G
的名称。 也就是说-Hibernate在模式DB11G
查找所有表,而不是在DB11G
模式中查找所有表,而mykong
实际上是已登录的日志。
您可以执行以下操作之一:
DB11G
登录,而不以mykong
==>的身份登录,请使用: <property name="hibernate.connection.username">DB11G</property>
<property name="hibernate.default_schema">DB11G</property>
mykong
模式DB11G
上所有表的适当特权(选择,插入,更新)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.