Как выбрать только определенные поля с помощью Quarkus Panache?

Quarkus упрощает сопоставления Hibernate ORM с Panache.

Вот пример моего entity а также PanacheRepository:

@Entity
public class Person {
    @Id @GeneratedValue private Long id;
    private String firstName;
    private String lastName;
    private LocalDate birth;
    private Status status;
}

@ApplicationScoped
public class PersonRepository implements PanacheRepository<Person> {

   // example
   public Person findByName(String name){
       return find("name", name).firstResult();
   }


   // ! and this is what I tried, but it's not possible to do it this way
   // all the methods return Person or something of type Person like List<Person>
   // so basically this won't even compile
   public List<String> findAllLastNames() {
       return this.find("select p.lastName from Person p").list();
   }

}

Все руководства объясняют, как писать разные запросы, но неясно, как выбирать только определенные атрибуты.

Если мне не нужно все Person объект, а скорее lastName всех лиц в моей БД?

Можно ли выбрать только определенные атрибуты с помощью Quarkus Panache?

3 ответа

Решение

В настоящее время это невозможно, вы можете подписаться на эту проблему, касающуюся проекции для Hibernate с Panache: https://github.com/quarkusio/quarkus/issues/6261

Не стесняйтесь голосовать за это (+1 реакция) и оставляйте отзывы.

Как сказал user2042457 , эта функция была добавлена, и ее документация доступна здесь .

Вы можете использовать параметры запроса ->

          Map<String, Object> params = new HashMap<>();
    params.put("fisrtName", fisrtName);
    params.put("lastName", lastName);

    final List<String> enetityList = Person.list("fisrtName= :fisrtName and lastName= :lastName", params);

ссылка - https://quarkus.io/guides/hibernate-orm-panache

Другие вопросы по тегам