在Spring Data中,JPA FindBy方法不起作用,并且“未找到类型的属性”不会发生异常。

时间:2019-01-04 12:15:56

标签: spring rest spring-boot spring-data-jpa spring-data

我是Spring Boot和JPA的新手,我创建了一个简单的JPA存储库,并尝试实现自定义的findBy方法,但它始终返回null,即使我在findBy之后使用了任何虚拟名称(这不是我的类的属性),不会显示任何错误。尽管默认的findBy方法可以正常工作。

package com.example.demo;

   import java.util.List;
   import org.springframework.beans.factory.annotation.Autowired;
   import org.springframework.stereotype.Service;

   @Service
   public class EmployeeService {

    // This is my service class.
    // Creating employee repository
    @Autowired
    EmployeeRepo er;

    // This is the method I want to implement
    public List<Employee> getByname(String name) {

        return er.findByName(name);
    }

}

//This is my Repository 

package com.example.demo;

import java.util.List;

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

public interface EmployeeRepo extends JpaRepository<Employee, Integer> {
        // Name is a property of Employee class
    public List<Employee> findByName(String name);
        // Dummy is not a property of Employee class
    public List<Employee> findByDummy(String name);


}

它应该给findByDummy方法一个错误,但没有给出。是否将此接口视为通用接口并允许任何声明。 对于findByName,它返回null。它应该基于名称进行搜索,并且对于findByDummy它应该显示错误。

谢谢。

2 个答案:

答案 0 :(得分:0)

您忘记在存储库中添加@Repository批注:

@Repository
public interface EmployeeRepo extends JpaRepository<Employee, Integer> {
        // Name is a property of Employee class
    public List<Employee> findByName(String name);
        // Dummy is not a property of Employee class
    public List<Employee> findByDummy(String name);


}

这应该可以解决问题。

答案 1 :(得分:0)

@Repository批注不是我的问题。我的问题是我在使用URL参数。

我的JPA存储库中具有以下方法:

Optional<Sample> findByEpisodeId(String episodeId);

然后,我在Controller中使用以下方法:

@GetMapping("/sample/{episodeId}")
    Sample getSampleBy(@PathVariable String episodeId) {
        return sampleService.findByEpisodeId(episodeId); // sampleService uses the jpa method
    }

我发送的请求是/sample/episodeId=12345

应该是/sample/12345