当前位置: 首页 > 知识库问答 >
问题:

在Spring Framework 5中发布连接JPA存储库

韦知
2023-03-14

我最近开始学习Java,以及Spring5和SpringBoot。我对创建web服务相对较新,所以首先我要创建一个在线宠物商店API。我一直遵循这个github教程中的源代码作为指南:https://github.com/in28minutes/spring-boot-examples/tree/master/spring-boot-2-rest-service-with-swagger

要部署API,我运行以下命令:

~mvn clean install
~mvn spring-boot:run

它构建成功,没有错误或警告。但是,当我使用sping-引导:运行命令时,我收到以下消息:

未能执行目标org.springframework.boot: spsping-gett-maven-plugin:2.0.2.RELEASE: run(default-cli)on项目gs-rest-service:运行时发生异常。null: InvocationTargetExc的:错误创建bean名称'petControl ler':不满意的依赖通过字段'petRepostory'表示;嵌套异常是org.springframework.beans.factory.NoSuchBean定义异常:没有合格的bean类型'petstore.pet.PetRepostory'可用:预计至少有1个bean符合自动连接候选条件。依赖注释:{@org.springframework.beans.factory.annotation.自动加载(必需=true)}-

我到处搜索,但似乎找不到答案。我的代码如下:

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-rest-service</artifactId>
    <version>0.1.0</version>

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

    <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>
        </dependency>
        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <version>1.0.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>2.0.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.0.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>
    </dependencies>

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


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

    <repositories>
        <repository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>

src/main/java/petstore/PetStoreApplication.java

package petstore;

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

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

src/main/java/petstore/Pet/Pet.java

package petstore.pet;

import com.sun.javafx.beans.IDProperty;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Pet {

    @Id
    @GeneratedValue
    private long id;

    private String name;
    private String status;

    public Pet(long id, String name, String status)
    {
        this.id = id;
        this.name = name;
        this.status = status;
    }

    public long getId()
    {
        return this.id;
    }

    public String getName()
    {
        return this.name;
    }

    public String getStatus()
    {
        return this.status;
    }

    public void setId(long id)
    {
        this.id = id;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public void setStatus(String status)
    {
        this.status = status;
    }
}

src/main/java/petstore/pet/PetRepository.java

package petstore.pet;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface PetRepository extends JpaRepository<Pet, Long>
{

}

src/main/java/petstore/PetController.java

package petstore.pet;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;


@RestController
public class PetController
{
    @Autowired
    private PetRepository petRepository;

    @GetMapping("/pets")
    public List<Pet>retrieveAllPets()
    {
        return petRepository.findAll();
    }
}

src/main/java/petstore/pet/PetNotFoundException.java

package petstore.pet;

html" target="_blank">public class PetNotFoundException extends RuntimeException
{
    public PetNotFoundException(String exception)
    {
        super(exception);
    }
}

我相信我在线路上遗漏了一些东西,但我不确定如何解决它,谷歌搜索也没有让我走得很远。为这个冗长的问题道歉。非常感谢任何帮助。

共有3个答案

顾乐家
2023-03-14

无法尝试添加以下依赖项。

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

也不需要版本,因为 Spring boot 具有此自动配置属性,它将自动获取每个依赖项的可行版本。

如果我们“手动”管理依赖项,我们需要指定所有依赖项的版本号。

康元凯
2023-03-14

您必须在 Spring 配置中添加 @EnableJpaRepositories(basePackages = ...),因为 Spring 不知道哪些软件包搜索以查找您的 PetRepository

谢财
2023-03-14

您应该只包含以下依赖项以使您的应用程序正常工作。此外,我添加了h2数据库依赖项,因为您的应用程序可能需要一个依赖项才能工作。请随时为您使用的数据库相应地更改它。

<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>
    </dependency>
     <dependency>
        <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>           
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>
</dependencies>
 类似资料:
  • 我显然遗漏了一些东西。我正在制作一个简单的应用程序,其中包含并面临以下错误: 我的代码: 应用程序: pom.xml 控制器: 人事服务: 个人服务: PersonRepository(此存储库不能自动连接): 已经在网上搜索了。我什么都没找到。有什么想法吗?

  • 我是Maven的新手,我的目标是在像(Nexus)这样的存储库中发布一个APK。这个APK是在Jenkins中用Unity3dBuilder插件构建的。我在jenkins的工作是一个Maven2/3项目,因此我需要配置我的pom.xml,以便能够发布我的工件(apk)。 请帮忙!!??

  • 目前,我正在努力连接并在f#中针对本地azure表存储(开发存储)执行操作。 我能找到的唯一与存储Auth连接的方法。StorageCredentials(accountName,accountKey)似乎不接受我在C#解析方法中使用的developmentstorage=true字符串。 我尝试使用相应的帐户名和密钥(devstoreaccount1,eby 8 VDM 02 xnoqflquw

  • 我正在开发一个Spring Boot应用程序,并在我的存储库中挣扎于SQL查询。查询应该选择员工的所有ID,从来没有张贴在我的WebApp。 在MySQL Workbench中,遵循语句ist working propper和我实现了预期的结果。 我不知道如何使用“on”并定义它的路径。

  • 我目前正在学习spring boot、hibernate和spring boot JPA 我为教练中心和机构开发了一个课堂应用程序。 其中,学生在一个学院注册了多个课程 学生实体类: 课程表实体类 已注册类别表的实体类别 JPA仓库 我的需要 现在我正在检索某个学院某个课程的注册学生。。。通过使用此MySQL查询 现在,我需要在CourseRepository(或enrolledstudent r

  • 问题内容: 据我所知,当我使用spring-data-rest时,此方法没有公开。有什么方法可以将其发布为spring-data-rest生成的REST API的一部分(无需自己创建Spring MVC Controller)? 问题答案: 我检查了代码库-似乎他们已明确禁用了自定义方法-不知道为什么。这是来自org.springframework.data.repository.core.sup