Unable to create tables in MySQL database automatically using Spring Boot.

huangapple go评论104阅读模式
英文:

Unable to create tables in MySQL database automatically using Spring Boot

问题

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

User.java

  1. @Entity
  2. public class User {
  3. @Id
  4. @GeneratedValue
  5. private Long id;
  6. private String firstName;
  7. private String lastName;
  8. @Column(unique = true, nullable = false)
  9. private String username;
  10. @Column(nullable = false)
  11. private String password;
  12. private String prevPass;
  13. @Column(nullable = false)
  14. private Organization organization;
  15. @ManyToMany
  16. @Column(nullable = false)
  17. private Set<Role> roles = new HashSet<>();
  18. @Column(nullable = false)
  19. private Boolean enabled = true;
  20. @Column(nullable = false, unique = true)
  21. private String email;
  22. private String position;
  23. public User() {
  24. }
  25. }

Role.java

  1. @Entity
  2. public class Role {
  3. @Id
  4. @GeneratedValue
  5. private Long id;
  6. @Column(unique = true, nullable = false)
  7. private String code;
  8. @Column(unique = true, nullable = false)
  9. private String title;
  10. }

application.properties

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

pom.xml 依赖项

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.3.2.RELEASE</version>
  5. <relativePath/> <!-- lookup parent from repository -->
  6. </parent>
  7. <dependencies>
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-data-jpa</artifactId>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-web</artifactId>
  15. </dependency>
  16. <dependency>
  17. <groupId>mysql</groupId>
  18. <artifactId>mysql-connector-java</artifactId>
  19. <scope>runtime</scope>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.projectlombok</groupId>
  23. <artifactId>lombok</artifactId>
  24. <optional>true</optional>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-tomcat</artifactId>
  29. <scope>provided</scope>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-starter-test</artifactId>
  34. <scope>test</scope>
  35. <exclusions>
  36. <exclusion>
  37. <groupId>org.junit.vintage</groupId>
  38. <artifactId>junit-vintage-engine</artifactId>
  39. </exclusion>
  40. </exclusions>
  41. </dependency>
  42. </dependencies>

我还在我的application.properties文件中使用了以下配置:

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

我必须提到我的实体与包含@SpringBootApplication注解的类位于同一个包中。以下是日志:

  1. 2020-08-10 22:52:14.139 INFO 10011 --- [ main] a.b.c.abc : Starting abc on user with PID 10011
  2. 2020-08-10 22:52:14.139 INFO 10011 --- [ main] a.b.c.abc : No active profile set, falling back to default profiles: default
  3. 2020-08-10 22:52:15.339 INFO 10011 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFERRED mode.
  4. 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.
  5. 2020-08-10 22:52:16.292 INFO 10011 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
  6. 2020-08-10 22:52:16.307 INFO 10011 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
  7. 2020-08-10 22:52:16.307 INFO 10011 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.37]
  8. 2020-08-10 22:52:16.495 INFO 10011 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
  9. 2020-08-10 22:52:16.495 INFO 10011 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2180 ms
  10. 2020-08-10 22:52:16.886 INFO 10011 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
  11. 2020-08-10 22:52:16.948 INFO 10011 --- [ task-1] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
  12. 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
  13. 2020-08-10 22:52:17.042 INFO 10011 --- [ task-1] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.18.Final
  14. 2020-08-10 22:52:17.378 INFO 10011 --- [ task-1] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
  15. 2020-08-10 22:52:17.724 INFO 10011 --- [ task-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
  16. 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 ''
  17. 2020-08-10 22:52:18.258 INFO 10011 --- [ main] DeferredRepositoryInitializationListener : Triggering deferred initialization of Spring Data repositories
  18. <details>
  19. <summary>英文:</summary>
  20. I`m new to Spring Boot and trying to create tables from my entities in MySQL database, but unfortunately nothing is created after running my application. Here is my code:
  21. **User.java**

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

  1. private String firstName;
  2. private String lastName;
  3. @Column(unique = true, nullable = false)
  4. private String username;
  5. @Column(nullable = false)
  6. private String password;
  7. private String prevPass;
  8. @Column(nullable = false)
  9. private Organization organization;
  10. @ManyToMany
  11. @Column(nullable = false)
  12. private Set&lt;Role&gt; roles = new HashSet&lt;&gt;();
  13. @Column(nullable = false)
  14. private Boolean enabled = true;
  15. @Column(nullable = false, unique = true)
  16. private String email;
  17. private String position;
  18. public User() {
  19. }

}

  1. **Role.java**

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

  1. @Column(unique = true, nullable = false)
  2. private String code;
  3. @Column(unique = true, nullable = false)
  4. private String title;

}

  1. **application.properties**

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

  1. **pom.xml dependencies**
  1. &lt;parent&gt;
  2. &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  3. &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;
  4. &lt;version&gt;2.3.2.RELEASE&lt;/version&gt;
  5. &lt;relativePath/&gt; &lt;!-- lookup parent from repository --&gt;
  6. &lt;/parent&gt;
  7. &lt;dependencies&gt;
  8. &lt;dependency&gt;
  9. &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  10. &lt;artifactId&gt;spring-boot-starter-data-jpa&lt;/artifactId&gt;
  11. &lt;/dependency&gt;
  12. &lt;dependency&gt;
  13. &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  14. &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
  15. &lt;/dependency&gt;
  16. &lt;dependency&gt;
  17. &lt;groupId&gt;mysql&lt;/groupId&gt;
  18. &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;
  19. &lt;scope&gt;runtime&lt;/scope&gt;
  20. &lt;/dependency&gt;
  21. &lt;dependency&gt;
  22. &lt;groupId&gt;org.projectlombok&lt;/groupId&gt;
  23. &lt;artifactId&gt;lombok&lt;/artifactId&gt;
  24. &lt;optional&gt;true&lt;/optional&gt;
  25. &lt;/dependency&gt;
  26. &lt;dependency&gt;
  27. &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  28. &lt;artifactId&gt;spring-boot-starter-tomcat&lt;/artifactId&gt;
  29. &lt;scope&gt;provided&lt;/scope&gt;
  30. &lt;/dependency&gt;
  31. &lt;dependency&gt;
  32. &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  33. &lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
  34. &lt;scope&gt;test&lt;/scope&gt;
  35. &lt;exclusions&gt;
  36. &lt;exclusion&gt;
  37. &lt;groupId&gt;org.junit.vintage&lt;/groupId&gt;
  38. &lt;artifactId&gt;junit-vintage-engine&lt;/artifactId&gt;
  39. &lt;/exclusion&gt;
  40. &lt;/exclusions&gt;
  41. &lt;/dependency&gt;
  42. &lt;/dependencies&gt;
  1. I have also used

spring.jpa.hibernate.ddl-auto=create

and

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

  1. in my application.properties file. I have to mention that my entities are in the same package with the class containing **@SpringBootApplication** annotaion.
  2. Here is the log:

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

  1. Can anyone help me please?
  2. </details>
  3. # 答案1
  4. **得分**: 1
  5. 以下是翻译好的内容:
  6. 1. 运行类应该具有`@SpringBootApplication`,或者至少其中一个配置类应该具有`@EnableAutoConfiguration`
  7. 2. 您不需要将tomcat作为依赖项。
  8. 3. 您可以更新您的pom文件以显示Spring Boot的父级。
  9. <details>
  10. <summary>英文:</summary>
  11. it might be helpful to do the following:
  12. 1. Running class should have `@SpringBootApplication` or at least one
  13. of your Configuration classes should have `@EnableAutoConfiguration`
  14. over it.
  15. 2. You don&#39;t need tomcat as a dependency.
  16. 3. Can you update your pom file to show us Spring Boot parent as well?
  17. </details>
  18. # 答案2
  19. **得分**: 0
  20. 我终于解决了。无法创建表格,因为我没有使用一对一关系来设置外键。
  21. <details>
  22. <summary>英文:</summary>
  23. I finally solve it. Tables could not be created because I hadn`t used One-to-One relationship for foreign key.
  24. </details>

huangapple
  • 本文由 发表于 2020年8月11日 02:14:02
  • 转载请务必保留本文链接:https://go.coder-hub.com/63345780.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定