Issue
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;
}
Solution
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();
Answered By - Sergey Tsypanov
Answer Checked By - Willingham (JavaFixing Volunteer)