标准API-在ElementCollection中使用UPPER
我有一节课标准API-在ElementCollection中使用UPPER,api,jpa,criteria,Api,Jpa,Criteria,我有一节课 @Entity public class Person{ ... @ElementCollection private Set<String> tags; ... } 谢谢您需要从Person调用连接标记上的大写和文字属性名称 CriteriaBuilder builder = this.em.getCriteriaBuilder(); CriteriaQuery<Person> query = builder.createQuery(Person.clas
@Entity
public class Person{
...
@ElementCollection
private Set<String> tags;
...
}
谢谢您需要从Person调用连接标记上的大写和文字属性名称
CriteriaBuilder builder = this.em.getCriteriaBuilder();
CriteriaQuery<Person> query = builder.createQuery(Person.class);
Root<Person> root = query.from(Person.class);
Join<Person, Tag> tags = root.join(Person_.tags);
query.where(builder.isMember(
builder.upper(builder.literal(searchTag)),
builder.upper(builder.literal(tags.get(Tag_.name)))
));
return this.em.createQuery(query).getResultList();
CriteriaBuilder=this.em.getCriteriaBuilder();
CriteriaQuery=builder.createQuery(Person.class);
Root=query.from(Person.class);
Join tags=root.Join(Person.tags);
query.where(builder.isMember(
builder.upper(builder.literal(searchTag)),
builder.upper(builder.literal(tags.get(Tag.name)))
));
返回此.em.createQuery(query.getResultList();
我省略了查询。选择(根)
,不确定是否需要它。
Tou还可以省略标记uz.name上的builder.literal(),因为它是字符串
如果我在某个地方错了,请编辑我的答案供其他用户使用
希望这有帮助。好的,我终于有了解决方案:
cQuery.where(
builder.equal(
builder.upper(cQuery.from(Relation.class).join(Relation_.aliase)
.as(String.class)),
builder.upper(builder.literal(alias))
)
);
必须使用“.as(..”方法。这将不起作用。我没有类“Tags”,我只有一组字符串。此外,isMember方法需要“Expression paramExpression1”,builder.upper返回Expression.interest情况。除了在getter上使用属性访问之外,我想不出任何其他方法,但这会很麻烦。我刚刚在我的问题中添加了解决方案作为一个注释
CriteriaBuilder builder = this.em.getCriteriaBuilder();
CriteriaQuery<Person> query = builder.createQuery(Person.class);
Root<Person> root = query.from(Person.class);
Join<Person, Tag> tags = root.join(Person_.tags);
query.where(builder.isMember(
builder.upper(builder.literal(searchTag)),
builder.upper(builder.literal(tags.get(Tag_.name)))
));
return this.em.createQuery(query).getResultList();
cQuery.where(
builder.equal(
builder.upper(cQuery.from(Relation.class).join(Relation_.aliase)
.as(String.class)),
builder.upper(builder.literal(alias))
)
);
suburbCriteria = criteriaBuilder.equal(
criteriaBuilder.upper(root.get(Property_.suburb)),
criteriaBuilder.upper(criteriaBuilder.literal(searchBean.getSuburb())));