Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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
Hibernate JPA标准生成器-表达式<;列表>;_Hibernate_Jpa_Orm_Jpa 2.0_Criteria Api - Fatal编程技术网

Hibernate JPA标准生成器-表达式<;列表>;

Hibernate JPA标准生成器-表达式<;列表>;,hibernate,jpa,orm,jpa-2.0,criteria-api,Hibernate,Jpa,Orm,Jpa 2.0,Criteria Api,我有一个简单的CriteriaQuery,其中我对Person实体中的字段实体进行了模式匹配的简单搜索String。。。e、 gsearchString总是用%searchString% //using MetaModel Expression<List<Records>> records = root.get(Person_.records); Expression<String> param = builder.parameter(String.class

我有一个简单的
CriteriaQuery
,其中我对
Person
实体中的字段实体进行了模式匹配的简单搜索
String
。。。e、 g
searchString
总是用
%searchString%

//using MetaModel
Expression<List<Records>> records = root.get(Person_.records);
Expression<String> param = builder.parameter(String.class);

//pseudo code(i think i need something like this here)
Predicate myPred = for all records (any record.FIELD LIKE searchString)

Path<Integer> status = root.get("status");

criteriaQuery.where(
    builder.or(
        builder.like(
            root.<String>get("name"), searchString
        ),
        builder.like(
            root.<String>get("second_name"), searchString
        )
        //pseuso code (i thin i need to check my predicate here?)
        builder.like(mypredicate)



    ),
    builder.equal(status,value)
);

我已经用我“认为”我想要的伪代码更新了我的代码。非常感谢任何帮助。

据我所知,使用CriteriaQuery是不可能的。我需要使用SQL查询。。。 我是这样做的


至少对于jpa 2.1是可能的。首先声明两个实体之间的连接,然后使用创建的连接来遍历变量

//using MetaModel
Expression<List<Records>> records = root.get(Person_.records);
Expression<String> param = builder.parameter(String.class);

SetJoin<Person, Record> joinRecord = root.joinSet("records", JoinType.INNER);

Path<Integer> status = root.get("status");

criteriaQuery.where(
    builder.or(
        builder.like(
            root.<String>get("name"), searchString
        ),
        builder.like(
            root.<String>get("second_name"), searchString
        ),            
        builder.like(
            joinRecord.<String>get("FIELD_NAME"), searchString
        )


    ),
    builder.equal(status,value)
);
//使用元模型
表达式记录=root.get(Person.records);
表达式param=builder.parameter(String.class);
SetJoin-joinRecord=root.joinSet(“records”,JoinType.INNER);
路径状态=root.get(“状态”);
criteriaQuery.where(
建筑商(
建筑工人(
root.get(“name”),searchString
),
建筑工人(
root.get(“第二个名称”),searchString
),            
建筑工人(
获取(“字段名称”),搜索字符串
)
),
生成器。相等(状态、值)
);

希望有帮助

您能提供一些关于您遇到的问题的更多细节,例如:关于您正在尝试实现的目标的更多细节,以及您正在尝试的内容,以及关于如何或为什么不起作用的详细信息吗?嗨,肖恩,谢谢您的回复。尝试解决的问题:搜索与搜索字符串匹配的所有db条目。在建立搜索“基本字段”的条件时,这很好。现在我想扩展搜索范围,以便在记录对象的嵌入式Lissy中也包括条目。例如,如果在“tim”上搜索姓名或姓氏中有匹配字段的任何person obj,或者如果记录obj中有匹配字段,则将返回person obj。@SeanMickey Hi Sean,感谢您的回复。尝试解决的问题:搜索与搜索字符串匹配的所有db条目。在构建搜索“基本字段”的条件时,这很好。我现在想扩展搜索,以便在记录对象的嵌入式lisr中也包括条目。例如,如果在“tim”上搜索姓名或姓氏中有匹配字段的任何person obj,或者如果其任何记录obj有匹配字段,则将返回person obj。@SeanMickey我已使用我认为需要的伪代码更新了示例代码。。。希望这个直升机能解释一下吗?谢谢你的回复…谢谢,这个格式很有用。我不知道你可以用generics做到这一点。我花了几个小时寻找一个解决方案,用表达式和标准来连接(特别是@ManyToMany JPA-join)。尽管有这个老问题,还是非常感谢你。:)
//using MetaModel
Expression<List<Records>> records = root.get(Person_.records);
Expression<String> param = builder.parameter(String.class);

SetJoin<Person, Record> joinRecord = root.joinSet("records", JoinType.INNER);

Path<Integer> status = root.get("status");

criteriaQuery.where(
    builder.or(
        builder.like(
            root.<String>get("name"), searchString
        ),
        builder.like(
            root.<String>get("second_name"), searchString
        ),            
        builder.like(
            joinRecord.<String>get("FIELD_NAME"), searchString
        )


    ),
    builder.equal(status,value)
);