java程序不断抛出错误org.springframework.beans.factory.beancreationexception spring boot

vojdkbi0  于 2021-07-22  发布在  Java
关注(0)|答案(3)|浏览(413)

我已经检查了我所有的代码好几个小时了,我似乎找不到这里的错误,它一直抛出org.springframework.beans.factory.beancreationexception:创建名为'imagerepository'的bean时出错:factorybean在创建对象时抛出异常;嵌套异常为java.lang.illegalargumentexception:不是托管类型:class entitiys.image
我的控制器如下所示:

package imageSearcher;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class AppController {

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

}

这是图像实体的外观:

package entitiys;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity(name = "image")     
public class Image {

    @Id
    @Column(name = "id")
    public Integer id;

    @Column(name= "imageURL")
    public String imageURL;

}

图像Map如下所示

package imageSearcher;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import entitiys.Image;

@CrossOrigin(origins = "*", allowedHeaders = "*")
@RestController
public class ImageController {

    @Autowired
    private ImageRepository imageRep;

    @GetMapping(path="/all")
    public Iterable<Image> index() {
        return imageRep.findAll();
    }

    @GetMapping(path = "/all/URL")
    public Iterable<String> AllURL() {
        return imageRep.findAllURL();
    }

}

imahe Crudepository如下所示:

package imageSearcher;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import entitiys.Image;

@Repository
public interface ImageRepository extends CrudRepository<Image, Integer>{

    @Query(value = "select * from Image", nativeQuery = true)
    Iterable<Image> findAll();

    @Query(value = "select Image.imageURL from Image", nativeQuery = true)
    Iterable<String> findAllURL();

}

这是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.3.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>spring-boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot</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-web</artifactId>
        </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.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- Use MySQL Connector-J -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

    </dependencies>

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

</project>

这是application.properties:

server.port=91
spring.datasource.url=jdbc:mysql://localhost:3306/gip2021
spring.datasource.username=root
spring.datasource.password=
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.naming_startegy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.hibernate.ddl-auto=none

我不知道这里出了什么问题,我希望有人能帮助我,因为这是我的最后一个项目,甚至我的老师也看不到这个问题
如果需要,这里还有数据库脚本:

create table Image(
    id integer unsigned auto_increment primary key,
    imageURL varchar(255)
);

insert into image (imageURL) values
    ("test"),
    ("test2");

对于任何想要git回购的人:https://github.com/michiel2003/gip2021.git

xxls0lw8

xxls0lw81#

把所有的东西都放在同一个包里,我的老师让我把所有的东西放在一个不同的包里,这不是你应该做的

xzabzqsa

xzabzqsa2#

@springbootplication的spring-boot文档:
许多spring引导开发人员总是用@configuration、@enableautoconfiguration和@componentscan注解他们的主类。由于这些注解经常一起使用(特别是在遵循上述最佳实践的情况下),springboot提供了一个方便的@springbootplication替代方案。@springbootapplication注解相当于使用@configuration、@enableautoconfiguration和@componentscan的默认属性:[…]
和 @Component 扫描:
如果未定义特定的包,则将从声明此注解的类的包中进行扫描。
所以只扫描imagesearcher包。您需要重新排列包或将@springbootapplication注解更改为
@springbootapplication(scanbasepackages={“imagesearcher”,“entitiys”})
编辑:如果你的老师告诉你把它移到不同的程序包里,也许他想让你像我建议的那样解决问题

mefy6pfw

mefy6pfw3#

已创建拉取请求:https://github.com/michiel2003/gip2021/pull/1 这将修复错误,您可以简单地将其合并:)
同意上面提到的关于@componentscan的每一点,并添加了吸引我注意的其他内容: this bug 可以很容易地复制添加一个假人 loadContext 测试,当您开始使用spring初始化器引导spring启动应用程序时,将生成此测试,这始终是最佳的启动方式 spring booting 我知道测试经验一直被视为初级开发人员的开销,但如果您想成为高级开发人员,那么它是值得的:)
在查看git历史时:请不要仅仅因为getter和setter看起来像模板代码就删除它们,如果您觉得合适,可以尝试添加lombok

相关问题