Реализовать поиск в БД Hibernate

Есть БД на Postgree, в ней таблица service. Класс описывающий эту таблицу приведен ниже. В классе DAO описал методы для работы с таблицей, а в классе ServiceServ методы, вызывающие методы из DAO.

Приложение на JavaFX. Есть окно с полями code и name. Как сделать поиск услуг по заполненным полям? Т.е. если одно из полей заполнено искать по заполненному, если оба поля заполнили искать по обеим. Что-то не могу найти подобного в примерах.

Класс описывающий таблицу

@Entity
@Table(name = "service")
public class Service {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    
    @Column(name = "text")
    private String text;
    
    @Column(name = "code")
    private int code;

    public Service() {

    }

    public Service(int id, String text, int code) {
        this.id = id;
        this.text = text;
        this.code = code;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }
}

Класс DAO

public class ServiceDao {

    public Service findByID(int id) {
        return HibernateSessionFactoryUtil.getSessionFactory().openSession().get(Service.class, id);
    }


    public List<Service> findAllServices() {
        List<Service> serviceList = (List<Service>) HibernateSessionFactoryUtil.getSessionFactory().openSession().createQuery("From Service").list();
        return serviceList;
    }
}

Класс ServiceServ

public class ServiceServ {

    private ServiceDao serviceDao = new ServiceDao();

    private ObservableList<Service> services = FXCollections.observableArrayList();

    public ServiceService() {}

    public ObservableList<Service> getServices() {
        return services;
    }

    public void fillServicesList() {
        services.addAll(serviceDao.findAllServices());
    }
}

Ответы (1 шт):

Автор решения: Barmaley

Вам нужно писать запрос типа такого:

FullTextEntityManager fullTextEntityManager=Search.getFullTextEntityManager(entityManager);
 
QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory() 
  .buildQueryBuilder()
  .forEntity(Service.class).get();

Query query = queryBuilder
  .keyword()
  .onFields("code", "name")
  .matching(text) //text - строка поиска
  .createQuery();

List<Service> results = query.getResultList();

Подробнее здесь

→ Ссылка