Подтвердить что ты не робот

Файловый h2 сохраняется, но не загружается в Spring Boot

Я сделал небольшое приложение на основе Spring Boot:

  • spring -boot-стартер-веб
  • spring -boot-стартер-данных JPA

Приложение имеет только один класс домена Post.java. Соответственно, есть RestController и DAO. Предполагается, что данные сохраняются в файле hsql db.

Когда приложение работает, все кажется прекрасным. Данные хранятся. Файл h2 создается и содержит инструкции insert.

Однако, когда я убиваю приложение и запускаю его во второй раз. Данные не загружаются. (Как будто был создан новый 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;
    }
}
4b9b3361

Ответ 1

По умолчанию для spring.jpa.hibernate.ddl-auto используется create-drop, если вы используете встроенную базу данных. Вероятно, вы хотите, чтобы он был пустым, или просто validate (none мог бы работать, но я думаю, что это не рекомендуется спящим).