【问题标题】:Unable to create tables in MySQL database automatically using Spring Boot无法使用 Spring Boot 在 MySQL 数据库中自动创建表
【发布时间】:2020-08-10 18:14:02
【问题描述】:

我是 Spring Boot 的新手,并试图从我的 MySQL 数据库中的实体创建表,但不幸的是,在运行我的应用程序后什么都没有创建。这是我的代码:

User.java

@Entity
public class User {
    @Id
    @GeneratedValue
    private Long id;

    private String firstName;

    private String lastName;

    @Column(unique = true, nullable = false)
    private String username;

    @Column(nullable = false)
    private String password;

    private String prevPass;

    @Column(nullable = false)
    private Organization organization;

    @ManyToMany
    @Column(nullable = false)
    private Set<Role> roles = new HashSet<>();

    @Column(nullable = false)
    private Boolean enabled = true;

    @Column(nullable = false, unique = true)
    private String email;

    private String position;

    public User() {
    }
}

Role.java

@Entity
public class Role {
    @Id
    @GeneratedValue
    private Long id;

    @Column(unique = true, nullable = false)
    private String code;

    @Column(unique = true, nullable = false)
    private String title;
}

application.properties

spring.datasource.url= jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=sth
spring.jpa.hibernate.ddl-auto=update

pom.xml 依赖项

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

我也用过

spring.jpa.hibernate.ddl-auto=create

and 

spring.jpa.hibernate.ddl-auto=create-drop

在我的 application.properties 文件中。我不得不提一下,我的实体与包含 @SpringBootApplication 注释的类在同一个包中。 这是日志:

2020-08-10 22:52:14.139  INFO 10011 --- [           main] a.b.c.abc          : Starting abc on user with PID 10011 
2020-08-10 22:52:14.139  INFO 10011 --- [           main] a.b.c.abc          : No active profile set, falling back to default profiles: default
2020-08-10 22:52:15.339  INFO 10011 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFERRED mode.
2020-08-10 22:52:15.370  INFO 10011 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 23ms. Found 0 JPA repository interfaces.
2020-08-10 22:52:16.292  INFO 10011 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-08-10 22:52:16.307  INFO 10011 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-08-10 22:52:16.307  INFO 10011 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.37]
2020-08-10 22:52:16.495  INFO 10011 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-08-10 22:52:16.495  INFO 10011 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2180 ms
2020-08-10 22:52:16.886  INFO 10011 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-08-10 22:52:16.948  INFO 10011 --- [         task-1] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-08-10 22:52:17.011  WARN 10011 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2020-08-10 22:52:17.042  INFO 10011 --- [         task-1] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.18.Final
2020-08-10 22:52:17.378  INFO 10011 --- [         task-1] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2020-08-10 22:52:17.724  INFO 10011 --- [         task-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-08-10 22:52:18.251  INFO 10011 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-08-10 22:52:18.258  INFO 10011 --- [           main] DeferredRepositoryInitializationListener : Triggering deferred initialization of Spring Data repositories…
2020-08-10 22:52:18.259  INFO 10011 --- [           main] DeferredRepositoryInitializationListener : Spring Data repositories initialized!
2020-08-10 22:52:18.299  INFO 10011 --- [           main] a.b.c.abc          : Started abc in 4.794 seconds (JVM running for 9.263)
2020-08-10 22:52:18.786  INFO 10011 --- [         task-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-08-10 22:52:18.817  INFO 10011 --- [         task-1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect

谁能帮帮我?

【问题讨论】:

  • 你能给我们看看日志吗?当你开始项目时
  • 您能否提供更多详细信息,例如日志或发生的任何运行时异常。
  • 使用spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect (如果使用springboot 2.x)否则使用-spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
  • @Hamza 我刚刚添加了。
  • @AjayKumar 很遗憾没用。

标签: java mysql spring spring-boot hibernate


【解决方案1】:

执行以下操作可能会有所帮助:

  1. 运行类应该有@SpringBootApplication或至少一个 您的配置类应该有@EnableAutoConfiguration 超过它。
  2. 您不需要将 tomcat 作为依赖项。
  3. 能否更新您的 pom 文件以向我们展示 Spring Boot 父级?

【讨论】:

  • 这个答案应该有效。和 spring.jpa.hibernate.ddl-auto=update,工作 2 就好了
  • 我已经在我的跑步课程中使用了@SpringBootApplication。我已经更新了上面的 pom.xml。感谢您的帮助。
【解决方案2】:

我终于解决了。无法创建表,因为我没有为外键使用一对一关系。

【讨论】:

    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 2016-10-11
    • 2021-10-30
    • 2015-01-08
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多