【问题标题】:Unable to see data in in memor h2 data base无法查看内存 h2 数据库中的数据
【发布时间】:2022-01-08 03:52:07
【问题描述】:

我正在尝试使用基类在内存 h2 数据库中添加一些初始值:

package com.example.demo.user;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;
import java.util.Date;

@Entity
public class User {

    @Id
    @GeneratedValue
    private Integer id;

    @Size(min=2,message = "Name length >= 2")
    private String name;

    @Past
    private Date dob;

    public User(Integer id, String name, Date dob) {
        this.id = id;
        this.name = name;
        this.dob = dob;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", dob=" + dob +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Date getDob() {
        return dob;
    }

    public void setDob(Date dob) {
        this.dob = dob;
    }
}

data.sql - insert into user values(1,sysdate(),'h'); schema.sql - create table user (id integer not null, dob timestamp, name varchar(255), primary key (id))

application.properties:

spring.jpa.show-sql=true
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.data.jpa.repositories.bootstrap-mode=default

无法查看数据。通过命令行运行程序初始化有效。日志不显示正在执行的命令。但如果我尝试删除 schema.sql,则会引发错误。

【问题讨论】:

    标签: spring-boot spring-data-jpa h2


    【解决方案1】:

    Spring 将使用这些脚本 schema.sql 和 data.sql,之后它还将使用您的实体层和注释再次创建/删除架构,这意味着之前对脚本所做的更改将被覆盖。

    由于您提供了自己的 schema.sql ,这意味着您不需要 ORM 供应商根据您拥有的实体注释为您创建架构。

    在这种情况下,您可以处理并声明属性spring.jpa.hibernate.ddl-auto= none

    这将不允许 ORM 供应商覆盖您对脚本所做的操作,并且在加载应用程序时只会使用这些脚本。

    PS:spring.jpa.hibernate.ddl-auto= create-drop 已经默认为您从 spring 自动定义,因为您选择了嵌入式数据库。

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2013-07-22
      相关资源
      最近更新 更多