【问题标题】:Hibernate Search returns a string typeHibernate Search 返回字符串类型
【发布时间】:2022-01-28 10:27:18
【问题描述】:

我在一个表中有两个不同的实体,pdfFieldformField。如果我们输入pdfField,我想建立一个返回formField的搜索。

@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;

这是我创建的函数,但我不确定如何使字符串返回类型。

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;
}

【问题讨论】:

    标签: java mysql hibernate search


    【解决方案1】:

    我认为切换到 Spring Data JPA 会更容易。使用它可以更轻松地实现预期目标:

    public interface PdfMapRepository extends JpaRepository<PdfMap, Integer> {
    
      @Query("select pm.pdfField from PdfMap pf where pf.id = :id")
      Optional<String> findPdfFieldByPdfMapId(Integer id); 
    
    }
    

    没有 Spring Data 也可以使用

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

    您也可以将 Criteria API 用作

    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();
    

    【讨论】:

    • 我不能这样做,因为还有其他类似的方法,我不允许修改所有内容。
    • 你对获取字符串有什么建议吗?
    • @Doyelmishra 我已经更新了答案
    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2020-09-15
    • 2018-03-02
    • 1970-01-01
    • 2020-11-01
    • 2014-02-22
    • 2015-08-18
    相关资源
    最近更新 更多