【发布时间】:2023-03-24 01:19:01
【问题描述】:
我正在尝试在本地创建一个基于 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>
application.properties:
spring.h2.console.enabled=true
文件夹结构看起来像这样
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;
并使用以下脚本创建了 USERS 表:
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;
}
}
【问题讨论】:
标签: hibernate spring-boot h2