无法看到由hibernate架构导出生成的生成表(H2数据库)

时间:2014-06-16 13:34:42

标签: spring h2 spring-boot

我正在尝试使用Spring Boot(v1.1.1.RELEASE)和H2数据库来获取一个小应用程序。在日志记录中,我看到ddl是正确生成的,但我在H2数据库中找不到表。

我手动将ddl复制到db visualizer中,sql没问题。我不知道我在这里缺少什么。当执行代码时,JPA持久层似乎正确地存储数据,因为我得到了生成的ID等等。我以为我在jdbc url中犯了一个错误,但它们都指向基于H2数据库的相同文件。但是这个数据库似乎没有数据。

JPA对象

@Entity
@Table(name = "rawdata", schema = "PUBLIC")
public class RawData {

    @Id
    @GeneratedValue
    private Long id;

    @Lob
    @Column(name = "payload", nullable = false)
    private String payload;

    // getters and setters omitted
}

JPARepository

@Repository
public interface RawDataRepository extends JpaRepository<RawData, Long> {

}

应用程序属性

spring.datasource.url=jdbc:h2:file:/home/username/dev-db
spring.datasource.driverClassName=org.h2.Driver
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true

记录信息

org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
Hibernate: drop table PUBLIC.rawdata if exists
Hibernate: create table PUBLIC.rawdata (id bigint generated by default as identity, payload clob not null, primary key (id))
org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete

测试代码

@Autowired
private RawDataRepository repository;

repository.saveAndFlush(new RawData("test"));
System.out.println(repository.count());

因此,保存JPA对象实际上似乎会持久化对象(计数增加等),但数据和表结构不会出现在数据库中。我看到在持久化对象时数据库的修改日期发生了变化,但我似乎无法使用例如squirrel / dbvisualizer等查看数据。任何提示或技巧?

1 个答案:

答案 0 :(得分:1)

问题是,当应用程序关闭时,Hibernate将删除整个架构,因为您已配置spring.jpa.hibernate.ddl-auto=create-drop

如果您将配置更改为spring.jpa.hibernate.ddl-auto=create,则会话结束时不会删除架构,您将能够看到创建的表格以及您插入的任何数据

相关问题