Hibernate 不会自动创建表

Ego*_*rus 5 java mysql spring hibernate

我有 Hibernate/Spring/MySQL 的 Maven 项目。我有基本实体,我希望 Hibernate 自动创建表,但 Hibernate 不创建任何表。也没有抛出异常,所以我不知道这里出了什么问题。

应用程序属性:

# ===============================
# = DATA SOURCE
# ===============================
spring.datasource.url = jdbc:mysql://localhost:3306/task
spring.datasource.username = root
spring.datasource.password = 12345678
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1

# ===============================
# = JPA / HIBERNATE
# ===============================
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = create
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.format_sql = true
spring.jpa.properties.hibernate.id.new_generator_mappings = true
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=15
spring.datasource.tomcat.test-while-idle=true
spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.time-between-eviction-runs-millis=3600000
spring.datasource.tomcat.validation-query=SELECT 1
Run Code Online (Sandbox Code Playgroud)

用户.java:

package com.example.model;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import lombok.Data;

@Entity
@Table(name = "user")
@Data
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private int id;

    @Column(name = "telegramId")
    private Integer telegramId;

    @Column(name = "firstName")
    private String firstName;

    @Column(name = "lastName")
    private String lastName;

    @OneToMany(
            mappedBy = "user",
            cascade = CascadeType.ALL,
            orphanRemoval = true
            )
    private List<Message> msg = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)

在 User.java 中,我也使用 lombok。有什么建议?谢谢你。

小智 5

您的属性文件中缺少此属性

hibernate.hbm2ddl.auto =“更新”

spring.jpa.properties.hibernate.hbm2ddl.auto=update
Run Code Online (Sandbox Code Playgroud)

hibernate.hbm2ddl.auto 在创建 sessionFactory 时自动验证 DDL 并将其导出到模式。

默认情况下,它不会在数据库上自动进行任何创建或修改。如果用户设置值来更新或创建或验证或创建删除,那么它会根据给定值自动执行 DDL 架构更改。


Ego*_*rus 5

我找到了解决方案。问题是 Application.java 在 package 中com.example.BotApp.,现在在com.example.. 我不知道,但不知何故它有所帮助。

  • 这意味着您的实体类没有被 spring boot 注释扫描(默认情况下扫描当前包及其子包)所选择。它在 https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-structuring-your-code.html 上有解释。如果你的主类有它自己的包,比如 `com.example.boot`,你需要添加 `scanBasePackages`,像这样:`@SpringBootApplication(scanBasePackages = {"com.example" })` 以扫描所有内容在其他包中 (3认同)