首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring项目不会自动创建数据库(MYSQL)

Spring项目不会自动创建数据库(MYSQL)
EN

Stack Overflow用户
提问于 2019-10-14 01:44:17
回答 3查看 371关注 0票数 0

对于一个项目,我必须使用spring-boot、hibernate和mysql创建一个数据库。我没有每个人说的错误,只是数据库不是在没有错误的情况下创建的。我不确定,但是为什么以及如何修复它。

当我运行应用程序时,我得到的日志:

代码语言:javascript
复制
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上尝试了几次更改(仍然无法识别),但都没有帮助/做了一些更改。

我的应用程序属性文件是:

代码语言:javascript
复制
# 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:

代码语言:javascript
复制
<?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文件:

代码语言:javascript
复制
<?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

实体包中的一些表:

代码语言:javascript
复制
@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;
代码语言:javascript
复制
@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创建整个数据库,但它不是这样工作的,我也不知道为什么。感谢您的帮助,谢谢!

EN

回答 3

Stack Overflow用户

发布于 2019-10-14 02:21:27

在application.properties中,更改为spring.datasource.url = jdbc:mysql://localhost:3306/yourDB?useSSL=falsespring.jpa.hibernate.ddl-auto = create

使用此方言spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect和此依赖项

代码语言:javascript
复制
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <scope>runtime</scope>
</dependency>

使用SpringBoot,您不再需要使用hibernate.cfg.xml。SpringBoot将为我们做这项工作,避免样板代码。只需使用应用程序属性设置您的应用程序...

要使用SpringBoot创建数据库,请记住您只需要三个设置步骤:

1- MySql Spring数据源(DataSourceAutoConfiguration & DataSourceProperties)

代码语言:javascript
复制
spring.datasource.url = jdbc:mysql://localhost:3306/YOURBD?useSSL=false
spring.datasource.username = root
spring.datasource.password = root

2- Hibernate属性

SQL方言使Hibernate能够为所选数据库生成更好的SQL

代码语言:javascript
复制
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect

最后一个

3- Hibernate ddl auto (创建、创建-删除、验证、更新)

代码语言:javascript
复制
spring.jpa.hibernate.ddl-auto = update or create

别忘了依赖..

票数 1
EN

Stack Overflow用户

发布于 2019-10-14 02:05:22

您需要在application.properties文件中传递所有hibernate属性值

票数 0
EN

Stack Overflow用户

发布于 2019-10-14 02:53:16

Spring boot不会创建数据库。Spring boot连接数据库,并根据java实体类创建和更新表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58366190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档