Home > Net >  Hibernate Search returns a string type
Hibernate Search returns a string type

Time:01-31

I have two different entities in a table, pdfField, and formField. I'd want to build a search that returns the formField if we enter in pdfField.

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;

@Column(name = "pdf_field")
private String pdfField;

@Column(name = "form_field")
private String formField;

This is the function I've created, but I'm not sure how to make the string return type.

public String getPdfFormFieldByPdfField(String PdfField) throws InterruptedException {
    Session session = sessionFactory.openSession();
    EntityManager entityManager = session.getEntityManagerFactory().createEntityManager();

    FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
    fullTextEntityManager.createIndexer().startAndWait();

    QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(PdfMap.class).get();

    org.apache.lucene.search.Query wildcardQuery = queryBuilder
            .keyword()
            .wildcard()
            .onField("pdf_field") // name of the field in database
            .matching(PdfField)
            .createQuery();


   String formField = ( how to get the result);

    return formField;
}

CodePudding user response:

I think it would be easier for you to switch to Spring Data JPA. Using that it would be easier for you to achieve the desired goal:

public interface PdfMapRepository extends JpaRepository<PdfMap, Integer> {

  @Query("select pm.pdfField from PdfMap pf where pf.id = :id")
  Optional<String> findPdfFieldByPdfMapId(Integer id); 

}

Without Spring Data the same can be achieved with

TypedQuery<String> query = em.createQuery("select pm.pdfField from PdfMap pf where pf.id = :id", String.class);
List<String> results = query.getResultList();

Alternatively you can use Criteria API as

Session session = sessionFactory.openSession();

CriteriaQuery<Double> cr = cb.createQuery(String.class);
Root<PdfMap> root = cr.from(PdfMap.class);
cr.select(root.get("pdfField"));

Query<String> query = session.createQuery(cr);
List<String> formFields = query.getResultList();
  •  Tags:  
  • Related