Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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
Java 最新的Hibernate和Derby:无法建立JDBC连接_Java_Hibernate_Maven_Jdbc_Derby - Fatal编程技术网

Java 最新的Hibernate和Derby:无法建立JDBC连接

Java 最新的Hibernate和Derby:无法建立JDBC连接,java,hibernate,maven,jdbc,derby,Java,Hibernate,Maven,Jdbc,Derby,我正在尝试创建一个使用Hibernate连接到Derby数据库的裸体项目。我正在使用Hibernate和Derby的最新版本,但是我得到了一个通用的无法建立JDBC连接的错误 这是我的pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.ap

我正在尝试创建一个使用Hibernate连接到Derby数据库的裸体项目。我正在使用Hibernate和Derby的最新版本,但是我得到了一个通用的
无法建立JDBC连接的
错误

这是我的
pom.xml
文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>StaticVoidGames</groupId>
    <artifactId>DatabaseTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>DatabaseTest</name>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.6.Final</version>
        </dependency>

        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.12.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derbyclient</artifactId>
            <version>10.12.1.1</version>
        </dependency>

        <dependency>
            <groupId>javax.transaction</groupId>
            <artifactId>jta</artifactId>
            <version>1.1</version>
        </dependency>

    </dependencies>
</project>
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <property name="connection.driver_class">org.apache.derby.jdbc.ClientDriver</property>

        <property name="connection.url">jdbc:derby:TestDerbyDB;create=true</property>
        <property name="connection.username"></property>
        <property name="connection.password"></property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.DerbyDialect</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <property name="hbm2ddl.auto">update</property>
    </session-factory>
</hibernate-configuration>
这是我的芭比娃娃代码:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class DatabaseTestMain {
    public static void main(String... args){
        Configuration derbyConfiguration = new Configuration().configure("hibernate-derby.cfg.xml");

        SessionFactory derbySF = derbyConfiguration.buildSessionFactory();
        Session derbySession = derbySF.openSession();

        derbySession.close();
    }
}
当我运行它时,我会得到以下堆栈跟踪:

Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:692)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    at DatabaseTestMain.main(DatabaseTestMain.java:9)
Caused by: org.hibernate.HibernateException: Unable to make JDBC Connection [jdbc:derby:TestDerbyDB;create=true]
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:60)
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.addConnections(PooledConnections.java:106)
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:40)
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:19)
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections$Builder.build(PooledConnections.java:138)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:110)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:74)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:234)
但无论我做什么,我仍然得到上面的错误。我错过什么了吗

在从Hibernate 4.0.1升级到Hibernate 4.3.5时,我问过同样的问题。关于我的类路径来自哪里,升级到新版本等等,有一些问题。所以我试着用所有东西的最新版本重新开始一个全新的项目,但我仍然遇到了错误


编辑:我应该注意,所有这些设置在Hibernate 4.0.1中运行良好,Derby数据库不需要用户名或密码。

您正在使用
ClientDriver
连接到本地数据库。最近的derby文档(在撰写本文时)说

加载Derby的本地JDBC驱动程序的类是
org.apache.derby.jdbc.EmbeddedDriver
。加载Derby的 网络客户端驱动程序是类
org.apache.derby.jdbc.ClientDriver

请参阅


因此,为了让代码能够运行,如果您不想做太多更改,我建议您使用
EmbeddedDriver
。如果您仍然必须使用
ClientDriver
,则必须将连接URL更改为类似
jdbc:derby://localhost:1527/MyDbTest;create=true
,而且您必须为客户驱动程序提供用户名和密码

是空白的。。。是否应该添加它?是否尝试将用户名设置为“sa”(无密码)并将“hbm2ddl.auto”设置为“create”?堆栈跟踪中必须有更多原因。@codeMan Derby数据库不需要用户名或密码。@Stefan堆栈跟踪中没有更多原因。这就是整个堆栈跟踪。我还应该注意到,这在Hibernate 4.0.1中运行良好。是否有任何特定的需要使用ClientDriver而不是EmbeddedDriver?切换到
EmbeddedDriver
似乎可以解决这个问题。不过,这在Hibernate 4.0.1中起到了作用——你知道他们是什么时候改变的吗?随着时间的推移,Hibernate内部经历了许多变化。它注册驱动程序和处理连接属性等的方式。例如,如果您尝试
System.out.println(DriverManager.getDriver(“jdbc:derby:”).getClass())在您的代码中,您将惊讶于实际的驱动程序是什么。。。
<property name="dialect">org.hibernate.dialect.DerbyTenSevenDialect</property>
<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
    <version>10.7.1.1</version>
</dependency>

<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derbyclient</artifactId>
    <version>10.7.1.1</version>
</dependency>