简体   繁体   English

无法从实体 Spring 引导生成表

[英]Can't generate table from entity Spring Boot

Please help:!!请帮忙:!! I can't generated table from entities**:我无法从实体生成表**:

// class Application
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;

@EntityScan("sb.entity")
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
// class Entity
package sb.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "category")
public class CategoryEntity {
    
    @Column(name = "name")
    private String name;
    
    @Column(name = "code")
    private String code;

}
// application.properties
server.port=8081

spring.datasource.url = jdbc:mysql://localhost:3306/springboot_database
spring.datasource.username = root
spring.datasource.password = hoa123456
spring.jpa.hibernate.ddl-auto = create-drop 

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

// file pom.xml
<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>
    <groupId>sb</groupId>
    <artifactId>sb</artifactId>
    <version>1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>

    <properties>
        <mysql.version>8.0.13</mysql.version>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

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

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

    
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.1.4.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.2.3.Final</version>
        </dependency>

    </dependencies>

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

</project>

This is console: I seach on overstack but i just add spring-boot-starter-data-jpa already.这是控制台:我在 overstack 上搜索,但我已经添加了 spring-boot-starter-data-jpa。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; org.springframework.beans.factory.BeanCreationException:创建名为“jpaMappingContext”的bean时出错:调用init方法失败; nested exception is java.lang.IllegalArgumentException: At least one JPA metamodel must be present.嵌套异常是 java.lang.IllegalArgumentException:必须存在至少一个 JPA 元模型。 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory:java.1628) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory:java.555) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory:java.483) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory:java.306) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.facto at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory:java.1628) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.factory. support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory:java.555) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory:java .483) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory:Z93F725A07423FE1C8849F4406F3)~D21-C8849F448B3) -4.3.13.RELEASE:jar.4.3.13.RELEASE] 在 org.springframework.beans.facto ry.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry:java.230) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory:java.302) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory:java.197) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory:java.742) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationConte ry.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry:java.230) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory :java.302) ~[spring-beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory:java.197) ~[spring- beans-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory:java.742) ~[spring-beans-4.3.13.RELEASE:jar .4.3.13.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationConte xt:java.867) ~[spring-context-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext:java.543) ~[spring-context-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext:java.122) ~[spring-boot-1.5.9.RELEASE:jar.1.5.9.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication:java.693) [spring-boot-1.5.9.RELEASE:jar.1.5.9.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication:java.360) [spring-boot-1.5.9.RELEASE:jar.1.5.9.RELEASE] at org.springframework.boot.Spring xt:java.867) ~[spring-context-4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext:java.543) ~[spring-context -4.3.13.RELEASE:jar.4.3.13.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext:java.122) ~[spring-boot-1.5.9.RELEASE:jar. 1.5.9.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication:java.693) [spring-boot-1.5.9.RELEASE:jar.1.5.9.RELEASE] at .refreshContext(SpringApplication:java.360) [spring-boot-1.5.9.RELEASE:jar.1.5.9.RELEASE] at org.springframework.boot.Spring Application.run(SpringApplication:java.303) [spring-boot-1.5.9.RELEASE:jar.1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication:java.1118) [spring-boot-1.5.9.RELEASE:jar.1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication:java.1107) [spring-boot-1.5.9.RELEASE:jar.1.5.9.RELEASE] at sb.api.Application.main(Application:java:11) [classes/:na] Caused by. Application.run(SpringApplication:java.303) [spring-boot-1.5.9.RELEASE:jar.1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication:java.1118) [spring-boot -1.5.9.RELEASE:jar.1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication:java.1107) [spring-boot-1.5.9.RELEASE:jar.1.5.9.RELEASE ] at sb.api.Application.main(Application:java:11) [classes/:na] 由。 java.lang:IllegalArgumentException. java.lang:IllegalArgumentException。 At least one JPA metamodel must be present.必须存在至少一个 JPA 元模型。 at org.springframework.util.Assert:notEmpty(Assert.java.277) ~[spring-core-4.3.13:RELEASE.jar.4.3.13.RELEASE] at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext:(JpaMetamodelMappingContext.java.52) ~[spring-data-jpa-1.11.9:RELEASE.jar.na] at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean:createInstance(JpaMetamodelMappingContextFactoryBean.java.71) ~[spring-data-jpa-1.11.9:RELEASE.jar.na] at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean:createInstance(JpaMetamodelMappingContextFactoryBean.java.26) ~[spring-data-jpa-1.11.9:RELEASE.jar.na] at org.springframework.bea at org.springframework.util.Assert:notEmpty(Assert.java.277) ~[spring-core-4.3.13:RELEASE.jar.4.3.13.RELEASE] at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext: (JpaMetamodelMappingContext.java.52) ~[spring-data-jpa-1.11.9:RELEASE.jar.na] at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean:createInstance(JpaMetamodelMappingContextFactoryBean.java.71) ~[ spring-data-jpa-1.11.9:RELEASE.jar.na] at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean:createInstance(JpaMetamodelMappingContextFactoryBean.java.26) ~[spring-data-jpa-1.11.9 :RELEASE.jar.na] 在 org.springframework.bea ns.factory.config.AbstractFactoryBean:afterPropertiesSet(AbstractFactoryBean.java.134) ~[spring-beans-4.3.13:RELEASE.jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory:invokeInitMethods(AbstractAutowireCapableBeanFactory.java.1687) ~[spring-beans-4.3.13:RELEASE.jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory:initializeBean(AbstractAutowireCapableBeanFactory.java.1624) ~[spring-beans-4.3.13:RELEASE.jar.4.3.13.RELEASE]... 16 common frames omitted ns.factory.config.AbstractFactoryBean:afterPropertiesSet(AbstractFactoryBean.java.134) ~[spring-beans-4.3.13:RELEASE.jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory:invokeInitMethods (AbstractAutowireCapableBeanFactory.java.1687) ~[spring-beans-4.3.13:RELEASE.jar.4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory:initializeBean(AbstractAutowireCapableBeanFactory.java.1624) ~[ spring-beans-4.3.13:RELEASE.jar.4.3.13.RELEASE]...省略了16个常用框架

enter image description here **在此处输入图像描述**

Please ensure you have that you have the Application class package in correctly placed under package.请确保您已将应用程序 class package 正确放置在 package 下。 For example if you have your Application.java( which has main) under com.sb, then Sb.java entity class should be under com.sb package. For example if you have your Application.java( which has main) under com.sb, then Sb.java entity class should be under com.sb package.

Another example另一个例子

com.sb --> Application.java com.sb --> 应用程序.java

com.sb.enity --> CategoryEntity.java com.sb.enity --> CategoryEntity.java

com.notscanned.test --> NotScannedCategoryEntity.java com.notscanned.test --> NotScannedCategoryEntity.java

The hierarchy matters, anything under com.sb.* will be autoscanned by spring.层次结构很重要,com.sb.* 下的任何内容都将由 spring 自动扫描。

Hope this solves your problem.希望这能解决您的问题。

When you create an Entity, you need to provide @Id annotation.创建实体时,需要提供@Id 注解。 This is mandatory.这是强制性的。 I am assuming you are getting error because of the same.我假设您因此而遇到错误。 Can you try creating entity as您可以尝试将实体创建为

package sb.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "category")
public class CategoryEntity {
    
@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Long id;
    @Column(name = "name")
    private String name;
    
    @Column(name = "code")
    private String code;

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM