我试图在 Spring Data JPA
Spring Boot
并且我一直收到错误,我无法弄清楚问题是什么:
无法在此 ManagedType [com.example.h2demo.domain.Subscriber] 上找到具有给定名称 [firstName] 的属性
FirstName 在我的实体类中声明。我之前在不同的项目中使用过 DAO 的服务类并且工作得很好。
我的实体类(getters 和 setters 也在类中):
@Entity
public class Subscriber {
@Id @GeneratedValue
private long id;
private String FirstName,LastName,Email;
public Subscriber(long id, String firstName, String lastName, String email) {
this.id = id;
this.FirstName = firstName;
this.LastName = lastName;
this.Email = email;
}
}
...
我的存储库类
@Component
public interface SubscriberRepository extends JpaRepository<Subscriber,Long> {
Subscriber findByFirstName(String FirstName);
Subscriber deleteAllByFirstName(String FirstName);
}
我的服务等级
@Service
public class SubscriberService {
@Autowired
private SubscriberRepository subscriberRepository;
public Subscriber findByFirstName(String name){
return subscriberRepository.findByFirstName(name);
}
public Subscriber deleteAllByFirstName(String name){
return subscriberRepository.deleteAllByFirstName(name);
}
public void addSubscriber(Subscriber student) {
subscriberRepository.save(student);
}
}
和我的控制器类:
@RestController
@RequestMapping("/subscribers")
public class SubscriberController {
@Autowired
private SubscriberService subscriberService;
@GetMapping(value = "/{name}")
public Subscriber findByFirstName(@PathVariable("name") String fname){
return subscriberService.findByFirstName(fname);
}
@PostMapping( value = "/add")
public String insertStudent(@RequestBody final Subscriber subscriber){
subscriberService.addSubscriber(subscriber);
return "Done";
}
}
原文由 smned 发布,翻译遵循 CC BY-SA 4.0 许可协议
尝试将
private String FirstName,LastName,Email;
更改为private String firstName,lastName,email;
它应该工作。
findByFirstName
在SubscriberRepository
试图找到一个字段firstName
按照约定,它不存在。关于如何遍历实体内部属性的进一步参考 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-property-expressions