Реализовать поиск в БД 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();