Wiem, że to kolejne podobne pytanie, ale nie mogę tego odpowiedzieć, dlatego piszę do ciebie za pomoc.

Próbuję stworzyć własne @Query i zwraca błąd konwersji na dwie okazje. Domyślam się, że istnieje problem z usługą, ale to jest miejsce, gdzie kończy się moja wiedza.

Oto mój kod:

  1. Główny podmiot

     @Data
     @Entity
     @Table(name = "users")
     public class User {
    
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     private long id;
     private String name;
     private String city;
     private  Date startDate;
     private boolean stat;
    
     public User() {
     }
    
     public User(String name, String city, Date startDate, boolean stat) {
         this.name = name;
         this.city = city;
         this.startDate = startDate;
         this.stat = stat;
      }
     }
    

2. Model

public class UserName {
    private String firstname;
    public UserName() {
    }
    public UserName(String firstname) {
        this.firstname = firstname;
    }
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
}

3. Model

public class UserCount {

    private String city;
    private int count;

    public UserCount() {
    }
    public UserCount(String city, int count) {
        this.city = city;
        this.count = count;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
}
  1. Magazyn

    @Magazyn Interfejs publiczny Odserrepository rozszerza Użytkownik JPArePository, Long & GT; {

     @Query("select p from User p")  //1.it's work
     List<User> getAll();
    
     @Query("select u from User u where u.name like %?1")  //2.it's work
     List<User> findByFirstnameEndsWith(String firstname);
    
     @Query("select u.name from User u ")  //3. don't work
     List<UserName> getNameUsers();
    
     // this SQL working in database console H2
     // SELECT city, count(*) FROM USERS  WHERE stat = true GROUP BY  city
     @Query("select u.city, count (u) from User u where u.stat = true group by u.city")  //3. don't work
     List<UserCount> getOwnQuery();
    

    }

  2. Usługa

    @Usługa Klasa publiczna Userservice { @Autobired. Private Userrepository Repo;

     public List<UserName> getN (){
         return repo.getNameUsers();
     }
    
     public List<UserCount> getC(){
         return repo.getOwnQuery();
     }
    

    }

  3. Kontroler

    @Kontroler Klasa publiczna MyController {

     @Autowired
     private UserRepository repo;
     @Autowired
     private UserService repoService;
    
     @GetMapping("/") //1.it's work
     ResponseEntity<List<User>> getAllCity(Pageable page){
         return ResponseEntity.ok(repo.getAll());
     }
     @GetMapping("/s") //2.it's work
     ResponseEntity<List<User>> getAllUsers(Pageable page){
         return ResponseEntity.ok(repo.findByFirstnameEndsWith("Seba"));
     }
     @GetMapping("/f") ///3.don't work
     ResponseEntity<List<UserName> >getUsersName(Pageable page){
         return ResponseEntity.ok(repoService.getN());
     }
     @GetMapping("/c") ///4.don't work
     ResponseEntity<List<UserCount> >getUsersCount(Pageable page){
         return ResponseEntity.ok(repoService.getC());
     }
    

    }

Dodaje również kod źródłowy na Github

Przepraszam, nie dodałem kodu błędu

enter image description here

2
Smyhail 29 lipiec 2020, 19:45

1 odpowiedź

Najlepsza odpowiedź

Użyj konstruktora za pomocą słowa kluczowego NEW w @Query, aby uzyskać List<UserName>

@Query("select NEW com.sub.model.UserName(u.name) from User u ")
List<UserName> getNameUsers();

I rób to samo dla List<UserCount>

@Query("select NEW com.sub.model.UserCount(u.city, count(u)) from User u where u.stat = true group by u.city")
List<UserCount> getOwnQuery();
1
Eklavya 29 lipiec 2020, 17:19