web-dev-qa-db-fra.com

Spring Data JPA Impossible de localiser l'attribut avec le nom donné

J'essayais d'utiliser Spring Data JPA sur Spring Boot et j'ai continué à avoir des erreurs, je n'arrive pas à comprendre le problème:

Impossible de localiser l'attribut avec le nom donné [prénom] sur this ManagedType [com.example.h2demo.domain.Subscriber]

FirstName est déclaré dans ma classe d'entité. J'ai utilisé une classe de service avec DAO auparavant avec un projet différent et a parfaitement fonctionné.

Ma classe d'entité (les getters et les setters sont aussi dans la classe):

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

Ma classe de référentiel

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

Ma classe de service

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

Et ma classe de contrôleur:

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

}
5
smned

Essayez de changer private String FirstName,LastName,Email; en private String firstName,lastName,email;

Ça devrait marcher.

findByFirstName dans SubscriberRepository essaie de trouver un champ firstName par convention qui n'y est pas.

7
harsh

Selon spécification , les noms de propriété doivent commencer par une petite casse. 

... L'algorithme de résolution commence par interpréter la totalité de la pièce (AddressZipCode) en tant que propriété et recherche dans la classe de domaine une propriété portant ce nom (non capitalisé) ....

Il essaiera de trouver une propriété avec un nom non capitalisé. Donc, utilisez firstName au lieu de FristName et etc .. 

2
DRB

Après avoir modifié mes variables entity class de lettre majuscule à lettre minuscule, par exemple, Username à username, la méthode Users findByUsername(String username); fonctionne pour moi à présent. 

0
Osama Al-Banna