对于一个项目,我必须使用 spring-boot、hibernate 和 mysql 创建一个数据库。我说没有错误,只是数据库不会在没有错误的情况下创建。我不确定为什么以及如何解决它。
运行应用程序时收到的日志:
2019-10-13 20:24:02.652 INFO 20288 --- [ main] D.p.t.D.p.try1.DsProiectTry1Application : Starting DsProiectTry1Application on DESKTOP-3KOFPIQ with PID 20288 (started by Diana in D:\AN 4\PROIECTE DS INCERCARI\DS-proiect-try1)
2019-10-13 20:24:02.652 INFO 20288 --- [ main] D.p.t.D.p.try1.DsProiectTry1Application : No active profile set, falling back to default profiles: default
2019-10-13 20:24:03.539 INFO 20288 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-10-13 20:24:03.557 INFO 20288 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 8ms. Found 0 repository interfaces.
2019-10-13 20:24:04.094 INFO 20288 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$2d7cd334] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-10-13 20:24:04.141 INFO 20288 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.hateoas.config.HateoasConfiguration' of type [org.springframework.hateoas.config.HateoasConfiguration$$EnhancerBySpringCGLIB$$acfd2066] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-10-13 20:24:04.676 INFO 20288 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2019-10-13 20:24:04.707 INFO 20288 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-10-13 20:24:04.707 INFO 20288 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.26]
2019-10-13 20:24:04.816 INFO 20288 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-10-13 20:24:04.832 INFO 20288 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2117 ms
2019-10-13 20:24:05.050 INFO 20288 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2019-10-13 20:24:05.253 INFO 20288 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2019-10-13 20:24:05.316 INFO 20288 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
2019-10-13 20:24:05.378 INFO 20288 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.3.12.Final}
2019-10-13 20:24:05.378 INFO 20288 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2019-10-13 20:24:05.509 INFO 20288 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
2019-10-13 20:24:05.616 INFO 20288 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
2019-10-13 20:24:05.788 INFO 20288 --- [ main] o.h.t.schema.internal.SchemaCreatorImpl : HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@ff21443'
2019-10-13 20:24:05.788 INFO 20288 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-10-13 20:24:06.366 INFO 20288 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2019-10-13 20:24:06.413 WARN 20288 --- [ main] aWebConfiguration$JpaWebMvcConfiguration : 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
2019-10-13 20:24:06.559 WARN 20288 --- [ main] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
2019-10-13 20:24:06.900 INFO 20288 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2019-10-13 20:24:06.900 INFO 20288 --- [ main] D.p.t.D.p.try1.DsProiectTry1Application : Started DsProiectTry1Application in 4.611 seconds (JVM running for 5.055)
我已尝试对应用程序属性文件和 hibernate.cfg.xml 进行多次更改(但仍然无法识别),但没有任何帮助/进行了一些更改。
我的应用程序属性文件是:
# Connection url for the database "netgloo_blog"
spring.datasource.url = jdbc:mysql://localhost:3306/mydbds?useSSL=false&autoReconnect=true
# Username and password
spring.datasource.username = root
spring.datasource.password =
# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
# ===============================
# = JPA / HIBERNATE
# ===============================
# Use spring.jpa.properties.* for Hibernate native properties (the prefix is
# stripped before adding them to the entity manager).
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update): with "update" the database
# schema will be automatically updated accordingly to java entities found in
# the project
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = create-drop
spring.datasource.driverClassName=com.mysql.jdbc.Driver
server.port=8080
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# Allows Hibernate to generate SQL optimized for a particular DBMS
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
我的pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>DS.proiect.try1</groupId>
<artifactId>DS-proiect-try1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>DS-proiect-try1</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.2.Final</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我的 hibernate.cfg.xml 文件:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- SQL Dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.org.hibernate.dialect.MySQLDialect</property>
<!-- Database Connection Settings -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydbds</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">create-drop</property>
<!-- Mapping With Model Class Containing Annotations -->
<mapping class=" DS.proiect.try1.DS.proiect.try1.Entities.Doctor" />
</session-factory>
</hibernate-configuration>
我的 intelij 项目结构是:https://imgur.com/zoSOKhL
实体包中的一些表:
@Entity
@Table(name="Caregiver")
public class Caregiver {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "idCaregiver", unique=true, nullable = false)
private int idCaregiver;
@Column(name="caregiverName")
private String caregiverName;
@Column(name="caregiverSurname")
private String caregiverSurname;
@Column(name="caregiverGender")
private String caregiverGender;
@Column(name="caregiverAddress")
private String caregiverAddress;
@Column(name="caregiverBirthdate")
private String caregiverBirthdate;
@Column(name="caregiverEmail")
private String caregiverEmail;
@Column(name="caregiverPassword")
private String caregiverPassword;
@OneToMany(mappedBy = "Caregiver_idCaregiver", cascade = CascadeType.ALL,fetch= FetchType.LAZY)
private Set<Patient> patientList;
@Entity
@Table(name = "Patient")
public class Patient {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "idPatient", unique=true, nullable = false)
private int idPatient;
@Column(name="patientName")
private String patientName;
@Column(name="patientSurname")
private String patientSurname;
@Column(name="patientGender")
private String patientGender;
@Column(name="patientBirthdate")
private Date patientBirthdate;
@Column(name="patientAddress")
private String patientAddress;
@Column(name="patientEmail")
private String patientEmail;
@Column(name="patientPassword")
private String patientPassword;
@ManyToOne
@JoinColumn(name="Caregiver_idCaregiver")
Caregiver Caregiver_idCaregiver;
它们之间的关系应该是这样的:https://imgur.com/undefined
我应该由 spring-boot 创建整个数据库,但它不能像那样工作,我不知道为什么。 感谢任何帮助,谢谢!
最佳答案
在 application.properties 中更改为 spring.datasource.url = jdbc:mysql://localhost:3306/yourDB?useSSL=false
和 spring.jpa.hibernate.ddl-auto =创建
。
使用此方言spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
和此依赖项
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
使用 SpringBoot,您不再需要使用 hibernate.cfg.xml。 SpringBoot 将为我们完成这项工作,避免使用样板代码。只需使用应用程序属性来设置您的应用程序...
要使用 SpringBoot 创建数据库,请记住,您只需要三个设置步骤:
1 - MySql Spring DATASOURCE(DataSourceAutoConfiguration 和 DataSourceProperties)
spring.datasource.url = jdbc:mysql://localhost:3306/YOURBD?useSSL=false
spring.datasource.username = root
spring.datasource.password = root
2 - hibernate 属性
SQL 方言使 Hibernate 为所选数据库生成更好的 SQL
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
最后一个
3 - Hibernate ddl auto(创建、创建-删除、验证、更新)
spring.jpa.hibernate.ddl-auto = update or create
并且不要忘记依赖关系..
关于java - Spring项目不自动创建数据库(MYSQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58366190/