java - Spring项目不自动创建数据库(MYSQL)

标签 java mysql spring hibernate intellij-idea

对于一个项目,我必须使用 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=falsespring.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/

相关文章:

java - 需要一个具有自定义标签和过滤功能的良好日志库

MySql 和 Glassfish : Error in allocating a connection

php - 使用左连接时的Mysqli转换

java - Netbeans 8.2 : How to stop embedded Tomcat in Spring. 在 osx 上引导项目?

java - 使用 spring 表达式语言评估二维数组中的单元格

java - 转发请求时的 Servlet/JSP URL

java - 日期时间比较不遵循时间线(java)

php - 注册用户只应进行一次身份验证

java - IntelliJ Spring MVC 部署教程

java - Spring - 基于带有@Autowired 字段的@Service 创建@Bean 导致@Autowired 字段出现NullPointerException