小编典典

基于文件的h2仍然存在,但未在Spring Boot中加载

spring-boot

我做了一个基于Spring Boot的小应用程序:

  • Spring Boot启动器网站
  • Spring Boot启动器数据jpa

该应用程序仅具有一个域类Post.java。因此,有一个RestController和一个DAO。该数据应保留在基于文件的hsql db中。

当应用程序运行时,一切似乎都很好。数据已存储。h2文件已创建并包含insert语句。

但是,当我终止该应用程序并再次启动它时。没有数据加载。(好像创建了一个新的db文件,它覆盖了旧的db文件)。

application.properties

spring.datasource.url = jdbc:h2:file:~/testdb
spring.datasource.username = sa
spring.datasource.password = sa
spring.datasource.driverClassName = org.h2.Driver

pom.xml

<!-- Spring Boot Web -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- Spring Boot Data JPA -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<!-- H2 DB -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.179</version>
</dependency>

PostDAO.java

public interface PostDAO extends JpaRepository<Post, Integer>{
    public Post findByMessage(String message);
}

Post.java

@Entity
public class Post {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private String message;

    public Post(){
    }

    public Post(String message) {
        super();
        this.message = message;
    }

    public Long getId() {
        return id;
    }

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

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

阅读 283

收藏
2020-05-30

共1个答案

小编典典

如果使用嵌入式数据库,spring.jpa.hibernate.ddl-auto则默认为create- drop。您可能希望它为空,或者只是validate(它none可能也可以工作,但是我认为hibernate时代已弃用)。

2020-05-30