Hibernate的String集合子查询匹配

我有一个Company实体,它有一个legalName: String属性,还有一个aliases: Set<String>属性(所以一对多) Company将是父对象aliases集合中的每个alias字符串都是子对象

我成功地进行了一个查询,它返回所有匹配父母legalName属性的公司(父母)和一个搜索查询字符串(LIKE),但我也想返回具有与搜索查询字符串匹配的别名(子女)的公司(父母) (所有与法定名称匹配的公司,或者至少一个别名,或两者兼有的公司)

我提前道歉,因为我觉得这是一个非常简单的例子,我非常习惯于编写普通的SQL,这是我第一次使用Hibernate或任何JPA实现

这是我的代码

val em: EntityManager = styxDao.getEntityManager
val criteriaBuilder: CriteriaBuilder = em.getCriteriaBuilder
val cq: CriteriaQuery[CompanyEntity] = criteriaBuilder.createQuery(classOf[CompanyEntity])
val companyEntityType: EntityType[CompanyEntity] = em.getMetamodel.entity(classOf[CompanyEntity])
val companyEntityRoot: Root[CompanyEntity] = cq.from(classOf[CompanyEntity])
var query: CriteriaQuery[CompanyEntity] = cq.select(companyEntityRoot)



if (countryCode == null) {
  query = query.where(
    criteriaBuilder.or(
      criteriaBuilder.like( // if legalName matches ("LIKE") the search string
        criteriaBuilder.lower(companyEntityRoot.get(companyEntityType.getDeclaredSingularAttribute("legalName", classOf[String]))),
        "%" + legalNameQuery.toLowerCase + "%"
      ).asInstanceOf[Expression[jBoolean]],
      // if any of the aliases match ("LIKE") the search string 
    )
  )
}

别名不是实体本身,它只是一个字符串集合,我只想在我的OR中添加第二个条件,如果任何别名匹配相同的legalNameQuery搜索字符串,则返回true

正如我前面提到的,如果我删除OR部分并仅运行legalName字符串匹配,它将起作用,不起作用的是将与别名匹配的OR的第二部分


我终于搞定了,不得不join aliases

query = query.where(
    criteriaBuilder.or(
      criteriaBuilder.like( // if legalName matches ("LIKE") the search string
        criteriaBuilder.lower(companyEntityRoot.get(companyEntityType.getDeclaredSingularAttribute("legalName", classOf[String]))),
        "%" + legalNameQuery.toLowerCase + "%"
      ).asInstanceOf[Expression[jBoolean]],
      criteriaBuilder.like (
        criteriaBuilder.lower (companyEntityRoot.join("aliases") ),
        "%" + legalName.toLowerCase + "%"
      ).asInstanceOf[Expression[jBoolean]]
    )
)
链接地址: http://www.djcxy.com/p/6327.html

上一篇: Hibernate subquery of String collection match

下一篇: Hibernate criteria to have multiple restrictions on the child collection