我是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它应该显示错误。
谢谢。
答案 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
。