如何在Spring项目中为Heroku Postgres配置Hibernate

时间:2019-03-28 13:39:14

标签: java spring hibernate heroku spring-data-jpa

我一直在尝试创建一个非常简单的Spring项目以与Heroku中的Postgres插件一起使用,但是我没有下面的Heroku文档中描述的任何方法都能正常工作:https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java

我尝试的最后一件事是使用Heroku为数据库创建的环境变量来创建hibernate.cfg.xml文档。我已经花了十多个小时尝试各种方式的不同配置,例如创建BasicDataSource bean,在application.yml和application.properties中配置数据库等。我还尝试了在Heroku中使用H2数据库,我已经开始工作了。

我的hibernate.cfg.xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.url">${JDBC_DATABASE_URL}</property>
        <property name="hibernate.connection.username">${JDBC_DATABASE_USERNAME}</property>
        <property name="hibernate.connection.password">${JDBC_DATABASE_PASSWORD}</property>
        <property name="hibernate.connection.pool_size">1</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</property>
    </session-factory>
</hibernate-configuration>

这是我对pom.xml的依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.6.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.5</version>
        </dependency>
</dependencies>

Java类非常基础,但是在这里; 申请:

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

控制器:

@RestController
public class TestController {
    @Autowired
    TestRepository repository;

    @PostMapping(name = "/add")
    public TestObject postObject(@RequestBody TestObject object) {
        return repository.save(object);
    }

    @GetMapping(name = "/get")
    public Iterable<TestObject> getFirst() {
        return repository.findAll();
    }
}

可持久对象:

@Entity
@Table(name = "testobjects")
public class TestObject {
    @Id
    @GeneratedValue
    private Long id;

    private String data;

    public TestObject(String data) {
        this.data = data;
    }

    public TestObject() {
    }

    public Long getId() {
        return id;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

最后,我的存储库:

public interface TestRepository extends CrudRepository<TestObject, Long> {
}

访问应用程序中的任何页面都会显示错误/异常:

  

发生意外错误(类型=内部服务器错误,状态= 500)。   无法提取ResultSet; SQL [n / a];嵌套的异常是org.hibernate.exception.SQLGrammarException:无法提取ResultSet

我希望从/ get映射以显示最初为空的列表,而/ post则将TestObject添加到所述列表。如果您想查看我上次运行该应用程序新版本时的heroku日志,则它们位于pastebin上:https://pastebin.com/0TQys5Me

EDIT1: 具有Hibernate命令输出和堆栈跟踪的Heroku日志:https://pastebin.com/s86UdHTx

0 个答案:

没有答案