smn*_*ned 8 java h2 spring-data-jpa spring-boot
我试图用Spring Data JPA在Spring Boot和我一直得到错误,我想不通的问题是什么:
无法在此ManagedType [com.example.h2demo.domain.Subscriber]上找到具有给定名称[firstName]的Attribute
FirstName在我的实体类中声明.我之前使用过DAO服务类和不同的项目并且工作得很好.
我的实体类(getter和setter也在类中):
@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;
}
}
...
Run Code Online (Sandbox Code Playgroud)
我的存储库类
@Component
public interface SubscriberRepository extends JpaRepository<Subscriber,Long> {
Subscriber findByFirstName(String FirstName);
Subscriber deleteAllByFirstName(String FirstName);
}
Run Code Online (Sandbox Code Playgroud)
我的服务类
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
和我的控制器类:
@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";
}
}
Run Code Online (Sandbox Code Playgroud)
har*_*rsh 11
尝试private String FirstName,LastName,Email;改为private String firstName,lastName,email;
它应该工作.
findByFirstName在SubscriberRepository试图找到一个场firstName按照惯例是不存在的.
同样的问题是当我处理 Spring Data Specifications ( https://www.baeldung.com/rest-api-search-language-spring-data-specifications )
最初的一段代码是:
private Specification<Project> checkCriteriaByProjectNumberLike(projectNumber: String) {
(root, query, criteriaBuilder) -> criteriaBuilder.like(root.get("project_number"), "%" + projectNumber)
}
Run Code Online (Sandbox Code Playgroud)
问题出在 root.get("project_number") 中。在方法内部,我必须将字段名称放在模型中 (projectNumber),但我发送的字段名称和数据库中一样 (project_number)。
也就是说,最终正确的决定是:
private Specification<Project> checkCriteriaByProjectNumberLike(projectNumber: String) {
(root, query, criteriaBuilder) -> criteriaBuilder.like(root.get("projectNumber"), "%" + projectNumber)
}
Run Code Online (Sandbox Code Playgroud)
例如,在我将entity class变量从大写字母更改为小写字母之后Username,该username方法Users findByUsername(String username);现在对我有用。
| 归档时间: |
|
| 查看次数: |
20300 次 |
| 最近记录: |