Spring Data JPA Unable to locate Attribute with the the given name

匿名 (未验证) 提交于 2019-12-03 01:18:02

问题:

I was trying to use Spring Data JPA on Spring Boot and I kept getting error, I can't figure out what the problem is:

Unable to locate Attribute with the the given name [firstName] on this ManagedType [com.example.h2demo.domain.Subscriber]

FirstName is declared in my entity class. I have used a service class with DAO before with different project and worked perfectly.

My Entity class (getters and setters are also in the class) :

        @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;           }         } ... 

My Repository Class

@Component public interface SubscriberRepository extends JpaRepository<Subscriber,Long> {     Subscriber findByFirstName(String FirstName);     Subscriber deleteAllByFirstName(String FirstName); } 

My Service Class

@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);     } } 

And My Controller class:

@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";     }  } 

回答1:

Try changing private String FirstName,LastName,Email; to private String firstName,lastName,email;

It should work.

findByFirstName in SubscriberRepository tries to find a field firstName by convention which is not there.



回答2:

As per specification , the property names should start with small case.

...The resolution algorithm starts with interpreting the entire part (AddressZipCode) as the property and checks the domain class for a property with that name (uncapitalized)....

It will try to find a property with uncapitalized name. So use firstName instead of FristName and etc..



回答3:

After I change my entity class variables from capital letter to small letter for instance Username to username the method Users findByUsername(String username); is working for me now .



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!