Hibernate 不会在 h2 中为使用 @Entity 注释的类创建专用表

Posted

技术标签:

【中文标题】Hibernate 不会在 h2 中为使用 @Entity 注释的类创建专用表【英文标题】:Hibernate doesn't create dedicated tables in h2 for classes annotated with @Entity 【发布时间】:2018-11-08 15:09:24 【问题描述】:

所以,我有类,用实体注释,当我启动 Spring Boot 应用程序时,我希望 Hibernate 在 h2 中创建表,但我什么也没看到 h2 Spring 应用程序属性只有 spring.h2.console.enabled=true

我的班级看起来像

@Entity

公开课作者

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

public Long getId() 
    return id;


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


private String firstName;
private String lastName;


private Set<Book> books = new HashSet<>();

public Author() 

请停止

【问题讨论】:

检查这有帮助吗? ***.com/questions/26881739/… How to create database schema in hibernate first time and further update it in case of schema modification?的可能重复 【参考方案1】:

JPA 具有生成 DDL 的功能,这些功能可以设置为在启动时针对数据库运行。这是通过两个外部属性控制的:

spring.jpa.generate-ddl(布尔值)打开和关闭功能,并且独立于供应商。 spring.jpa.hibernate.ddl-auto (enum) 是一种 Hibernate 功能,可以更细粒度地控制行为。

您的属性文件应如下所示:

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driverClassName=org.h2.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

【讨论】:

以上是关于Hibernate 不会在 h2 中为使用 @Entity 注释的类创建专用表的主要内容,如果未能解决你的问题,请参考以下文章

在数据库中使用带有 H2 的 Hibernate 时出错

使用 H2 DB 进行 Spring/Hibernate 集成测试

使用 H2、JPA 注释和 Hibernate 问题的一对多关联

如何使用hibernate jpa在内存数据库中设置h2?

Hibernate/H2 外键抛出 org.h2.jdbc.JdbcSQLException

一般意义上的h2与hibernate和MySql之间的区别