我已经检查了我所有的代码好几个小时了,我似乎找不到这里的错误,它一直抛出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
3条答案
按热度按时间xxls0lw81#
把所有的东西都放在同一个包里,我的老师让我把所有的东西放在一个不同的包里,这不是你应该做的
xzabzqsa2#
@springbootplication的spring-boot文档:
许多spring引导开发人员总是用@configuration、@enableautoconfiguration和@componentscan注解他们的主类。由于这些注解经常一起使用(特别是在遵循上述最佳实践的情况下),springboot提供了一个方便的@springbootplication替代方案。@springbootapplication注解相当于使用@configuration、@enableautoconfiguration和@componentscan的默认属性:[…]
和 @Component 扫描:
如果未定义特定的包,则将从声明此注解的类的包中进行扫描。
所以只扫描imagesearcher包。您需要重新排列包或将@springbootapplication注解更改为
@springbootapplication(scanbasepackages={“imagesearcher”,“entitiys”})
编辑:如果你的老师告诉你把它移到不同的程序包里,也许他想让你像我建议的那样解决问题
mefy6pfw3#
已创建拉取请求:https://github.com/michiel2003/gip2021/pull/1 这将修复错误,您可以简单地将其合并:)
同意上面提到的关于@componentscan的每一点,并添加了吸引我注意的其他内容:
this bug
可以很容易地复制添加一个假人loadContext
测试,当您开始使用spring初始化器引导spring启动应用程序时,将生成此测试,这始终是最佳的启动方式spring booting
我知道测试经验一直被视为初级开发人员的开销,但如果您想成为高级开发人员,那么它是值得的:)在查看git历史时:请不要仅仅因为getter和setter看起来像模板代码就删除它们,如果您觉得合适,可以尝试添加lombok