Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
标准API-在ElementCollection中使用UPPER_Api_Jpa_Criteria - Fatal编程技术网

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