如何在 Spring Boot 应用程序中从数据库表中填充实体

Posted

技术标签:

【中文标题】如何在 Spring Boot 应用程序中从数据库表中填充实体【英文标题】:How to populate entities from database table in spring boot application 【发布时间】:2020-09-27 00:35:38 【问题描述】:

**我正在尝试创建一个springboot应用程序并创建了数据库和表。现在需要从创建的数据库表中填充实体。 Spring sts 是我的编辑器。我没有创建任何单独的配置类来设置数据源等,因为我希望 springboot 能够做到这一点。我是否需要有单独的配置类来建立连接。但是在尝试填充实体时会出现以下错误。 **

org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

下面给出的是应用程序文件

> 这是 application.properties 文件。

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

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=update

server.port=$PORT:8081

>这是我的 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.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>io.javabrains.com</groupId>
    <artifactId>spring-security-jdbc</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-security-jdbc</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-jdbc</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</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.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>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

>主类

    @SpringBootApplication
public class SpringSecurityJdbcApplication 

    public static void main(String[] args) 
        SpringApplication.run(SpringSecurityJdbcApplication.class, args);
    


请帮助解决此问题。提前致谢。

【问题讨论】:

尝试指定以下属性spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect(而不是spring.jpa.properties.hibernate.dialect 不工作@Vasiliy Sarzhynskyi @Kleber Mota 对此问题的任何建议 对此问题有任何建议@Andy Wilkinson 【参考方案1】:

我认为问题出在您的 application.properties 文件中。

你有:

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

但是jpa 上没有properties 属性。 尝试删除属性,您的行应如下所示:

spring.jpa.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

【讨论】:

嗯。你试过方言org.hibernate.dialect.MySQLDialect吗?现在你有org.hibernate.dialect.MySQL5Dialect 是的,我也尝试过,但没有奏效。 @Alex。

以上是关于如何在 Spring Boot 应用程序中从数据库表中填充实体的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中从应用程序属性文件中读取 jpa 命名查询?

如何在 Spring Boot 中从 Azure SAML 2.0 应用程序获取角色或组

如何在spring boot中从同一个应用程序调用另一个api

如何在 Spring Boot 中从 mongodb 更改 geojson (GeoJsonPolygon) 的编组?

如何在 Spring Boot 中从端点响应中全局省略空 xml 标记?

如何在 Spring Boot 应用程序中从 Api 网关(Zuul)调用外部服务(非 MSA)