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、 gsearchString
总是用%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)
);