0
我有具有legalName: String
属性Company
实体,也是一个aliases: Set<String>
性质(所以一到多) Company
将父 每个alias
字符串的aliases
收集将是儿童Hibernate的子查询
我成功地进行了一个查询,返回所有与父类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
)
)
}
的别名并不是每本身的实体,它只是字符串的集合,我只是想在我可以添加第二个标准的返回true,如果任何一个别名相同legalNameQuery
匹配搜索字符串
正如我前面提到的,如果我删除OR
部分,只是运行legalName字符串匹配,它的作品,什么行不通是OR
将匹配别名
大概用'any(subquery)'?我只是不知道如何使子查询返回集合中的任何字符串是否与'a like b'运算符匹配查询 – dominicbri7