java.sql.SQLException:架构“ROOT”不存在

Posted

技术标签:

【中文标题】java.sql.SQLException:架构“ROOT”不存在【英文标题】:java.sql.SQLException: Schema 'ROOT' does not exist 【发布时间】:2012-01-26 18:36:59 【问题描述】:

我正在使用带有嵌入式 derby 的 hibernate,并且我希望 hibernate 创建数据库和表,所以我尝试了以下配置,但我收到了错误:

java.sql.SQLException: Schema 'ROOT' does not exist

这里/s我的配置:

    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="com.myapp.domain" />


    <property name="hibernateProperties">
        <value>
            hibernate.dialect=org.hibernate.dialect.DerbyDialect
            hibernate.hbm2ddl.auto=create
            hibernate.show_sql=false
            hibernate.format_sql=false
        </value>
    </property>

</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" />

    <property name="url" value="jdbc:derby:test;create=true" />

    <property name="username" value="root" />

    <property name="password" value="root" />

</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>


<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

更新:这是我第一次使用 derby,所以我可能缺少一些信息,所以我有一个问题:

我是否必须像这里一样配置 Embedded Derby:

http://db.apache.org/derby/papers/DerbyTut/install_software.html

更新2:我删除了classpath上负责在数据库中插入demo数据的import.sql脚本文件,发现创建数据库表时出错:

1202 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - Running hbm2ddl schema export
1202 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - exporting generated schema to database
1359 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - Unsuccessful: create table users (user_id bigint generated by default as identity unique, address varchar(255), email varchar(155) not null, mobile varchar(25), name varchar(25) not null, password varchar(255) not null, primary key (user_id))
1359 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - Constraints 'SQL111223214919671' and 'SQL111223214919670' have the same set of columns, which is not allowed. 
1359 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - schema export complete
1360 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Warning: 10000, SQLState: 01J01
1360 [main] WARN org.hibernate.util.JDBCExceptionReporter - Database 'test' not created, connection made to existing database instead.

【问题讨论】:

从未使用过德比。但是您是否为数据库定义了用户“root”(可以访问测试库) 好吧,我只是尝试了这里的配置,我认为它应该使用上面的用户/密码***.com/questions/8459284/…创建数据库 这里有一个嵌入式驱动程序 tut:db.apache.org/derby/papers/DerbyTut/embedded_intro.html。但是你的代码看起来不错 faq 表示该架构是在创建该架构中的某些内容时创建的。你能看到执行了哪些sql语句吗?也许休眠(或春天)从这里开始。 @Vinze,@oers 我更新了帖子,请指教。 【参考方案1】:

在从类路径中删除 import.sql 文件并运行应用程序后,我发现错误是创建了数据库,但由于问题http://issues.apache.org/jira/browse/DERBY-789 而不是由 hbm2ddl 创建表 在此声明:constraint problems using apache derby and hbm2ddl

不能将主键定义为唯一的,因为这是由数据库本身处理的。

所以当我从主键中删除唯一属性时,错误就消失了。

【讨论】:

【参考方案2】:

抱歉,我自己从未使用过 Derby,但我认为问题在于 Hibernate 无法为您创建任何数据库、数据库用户或数据库模式。这只是一个猜测,但对我来说,错误消息表明您还需要用户的数据库模式。尝试预先创建数据库、数据库用户根和模式根,然后连接 Hibernate 以创建表。

【讨论】:

;create=true 应该注意这一点 @oers:谢谢,没看到。但我很确定 hibernate 无法创建模式,而且看起来用户的模式丢失了。所以,我会尝试使用 create=false 并事先创建数据库和架构。【参考方案3】:

最简单的解决方案是配置您的数据库属性并使架构与用户名相同但大写,例如:架构 APP 用户应用

希望我的回答能帮到你。

【讨论】:

以上是关于java.sql.SQLException:架构“ROOT”不存在的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Date(示

java.sql.SQLException:getShort() 的值无效 - ''

java.sql.SQLException: SQL 语句在 org.hsqldb.jdbc.JDBCUtil.sqlException 处关闭

Oracle DB:java.sql.SQLException:关闭连接

Cause: java.sql.SQLException: 请求的转换无效 ; uncategorized SQLException for SQL []; SQL state [99999]; er

java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 发生错误