【问题标题】:Configuring JPA with Spring使用 Spring 配置 JPA
【发布时间】:2017-09-16 03:33:56
【问题描述】:

我正在尝试将 JPA 配置为与基本的 spring 应用程序和 h2 数据库一起运行。我收到以下错误消息(我认为这是日志中最相关的部分):

Sep 15, 2017 10:23:26 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: HHH000319: Could not get database metadata
org.h2.jdbc.JdbcSQLException: Connection is broken: "java.net.ConnectException: Connection refused: connect: localhost" [90067-175]

这让我感到惊讶,因为这是我试图运行的 Wrox 开始 Spring 4 文本中的代码。我的 persistence.xml(位于 Meta-Inf 中)如下:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="test-jpa" transaction-type="RESOURCE_LOCAL">
        <properties>
            <property name="hibernate.connection.driver_class" value="org.h2.Driver" />
            <property name="hibernate.connection.url" value="jdbc:h2:tcp://localhost/~/test" />
            <property name="hibernate.connection.username" value="sa" />
            <property name="hibernate.connection.password" value="" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>

我的主应用程序类没有导入和 pom 跟随:

public class Main {

    public static void main(String[] args) {
        EntityManagerFactory entityManagerFactory = 
            Persistence.createEntityManagerFactory("test-jpa");
        System.out.println(entityManagerFactory.isOpen());
    }
}

<dependencies>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.11.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.2.10.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.10.Final</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.196</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.2.Final</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
    </dependencies>
</project>

感谢您的帮助, 马克

【问题讨论】:

  • 谢谢 - 我在那里看到这条评论:“版本更新是一个很好的步骤,我发现 db 路径有问题,我更新它 //localhost/./testdb 现在一切正常。”似乎解决了我的问题,但我是 Spring 的新手,还有一些问题。这条路在哪里? persistence.xml 文件?我把它改成上面的,但仍然得到同样的错误。

标签: java spring hibernate jpa orm


【解决方案1】:

好的,我在这里找到了答案 https://gist.github.com/mortezaadi/8619433 这是各种常见数据库类型的示例 persistence.xml 文件的很好列表。

persistence.xml 中包含“hibernate.connection.url”的行应该是:

<property name="hibernate.connection.url" value="jdbc:h2:target/h2-1" />

我知道这是告诉 jdbc h2 驱动程序在哪里寻找 h2 数据库,对吗?我的代码现在可以工作,但我想了解原因。是因为旧代码在普通的 java Spring 控制台应用程序中调用 localhost 吗?旧配置是否适合 Spring Web 项目?为什么旧行(引用如下)导致错误?

<property name="hibernate.connection.url" value="jdbc:h2:tcp://localhost/~/test" />

感谢您的帮助, 马克

【讨论】:

    猜你喜欢
    • 2012-05-10
    • 2011-07-19
    • 2020-03-16
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2018-06-02
    • 1970-01-01
    相关资源
    最近更新 更多