Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
基于文件的H2数据库不适用于Spring boot/Hibernate应用程序_Hibernate_Spring Boot_H2 - Fatal编程技术网

基于文件的H2数据库不适用于Spring boot/Hibernate应用程序

基于文件的H2数据库不适用于Spring boot/Hibernate应用程序,hibernate,spring-boot,h2,Hibernate,Spring Boot,H2,我试图在本地创建一个基于h2文件的数据库,但当我启动连接到它的应用程序时,它失败了。将应用程序连接到h2数据库时使用的唯一文件是: hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class"

我试图在本地创建一个基于h2文件的数据库,但当我启动连接到它的应用程序时,它失败了。将应用程序连接到h2数据库时使用的唯一文件是:

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.h2.Driver</property>
        <property name="hibernate.connection.url">dbc:h2:file:./database</property>
        <property name="hibernate.connection.username">sa</property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
        <property name="show_sql">true</property>
        <mapping class = "com.example.SneakyCaloriesV2.pojo.Users"/>
    </session-factory>
</hibernate-configuration>
文件夹结构如下所示

SneakyCaloriesV2:
   src/main/java
   src/main/resources
        application.properties
        database
        hibernate.cfg.xml
我得到这个错误:

2020-03-07 22:21:20.083  INFO 13492 --- [           main] org.hibernate.orm.connections.pooling    : HHH10001005: using driver [org.h2.Driver] at URL [dbc:h2:file:./database]
2020-03-07 22:21:20.084  INFO 13492 --- [           main] org.hibernate.orm.connections.pooling    : HHH10001001: Connection properties: {user=sa, password=****}
2020-03-07 22:21:20.084  INFO 13492 --- [           main] org.hibernate.orm.connections.pooling    : HHH10001003: Autocommit mode: false
2020-03-07 22:21:20.086  INFO 13492 --- [           main] .c.i.DriverManagerConnectionProviderImpl : HHH000115: Hibernate connection pool size: 20 (min=1)
Error in creating SessionFactory object.Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
2020-03-07 22:21:20.087  WARN 13492 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactoryInitializer': Invocation of init method failed; nested exception is java.lang.ExceptionInInitializerError
2020-03-07 22:21:20.087  INFO 13492 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-03-07 22:21:20.087  INFO 13492 --- [           main] .SchemaDropperImpl$DelayedDropActionImpl : HHH000477: Starting delayed evictData of schema as part of SessionFactory shut-down'
如何正确创建基于h2文件的数据库

第二个问题:

使用本地数据库时,在触发使用H2的请求时,我会遇到以下错误:

Sequence "USER_ID_SEQUENCE" not found; SQL statement:
我使用以下语句在H2中创建了一个序列:

CREATE SEQUENCE USER_ID_SEQUENCE INCREMENT BY 1 START WITH 1;
并使用以下脚本创建用户表:

CREATE TABLE USERS(
     ID INT PRIMARY KEY,
     USERNAME VARCHAR(50) UNIQUE,
     PASSWORD VARCHAR(50) NOT NULL,
     NAME VARCHAR(50) NOT NULL,
     LAST_NAME VARCHAR(50) NOT NULL
);
以下是我的pojo映射类:

package com.example.SneakyCaloriesV2.pojo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table( name = "USERS")
public class Users {
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "author_generator")
    @SequenceGenerator(name="author_generator", sequenceName = "USER_ID_SEQUENCE", allocationSize=1)
    @Column(name = "ID", updatable = false, nullable = false)
    private int userID;

    @Column(name = "USERNAME")
    private String username;

    @Column(name = "PASSWORD")
    private String password;

    @Column(name = "NAME")
    private String name;

    @Column(name = "LAST_NAME")
    private String lastName;

    public int getUserID() {
        return userID;
    }

    public void setUserID(int userID) {
        this.userID = userID;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

您应该在
应用程序.properties
.yml
文件中配置数据库,如下所示:

spring.datasource.url=jdbc:h2:file:./database;DB_CLOSE_ON_EXIT=FALSE
第二个问题可能会出现,因为您实际上没有连接到本地数据库,因此缺少序列/表的设置

spring.datasource.url=jdbc:h2:file:./database;DB_CLOSE_ON_EXIT=FALSE