【发布时间】:2017-11-29 13:26:02
【问题描述】:
我有一个对象,我们称之为人:
@Entity
@Table(name = "PERSON")
public class Person extends PersistentObject {
@Id
@Column(name = "NAME")
private String name;
@Column(name = "AGE")
private String age;
@Column(name = "NICKNAME")
private String nickname;
@Column(name = "HAIR_COLOR")
private String hairColor;
.
.
.
我想将此对象用作使用谓词的 CriteriaQuery 上的过滤器,但是当某些输入 Obj 为 NULL(例如 NickName)时,它会中断查询。这是我目前拥有的代码示例。
public List<Person> getPeople(List<Person> peopleToGet)
{
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Person> cq = cb.createQuery(Person.class);
Root<Person> e = cq.from(Person.class);
List<Predicate> predicates = new ArrayList<Predicate>();
for(Person person : peopleToGet)
{
predicates.add(cb.or(cb.and(
cb.equal(e.get("name"), person.getName()),
cb.equal(e.get("age"), person.getAge()),
cb.equal(e.get("nickname"), person.getNickname()),
cb.equal(e.get("hairColor"), person.getHairColor())
)));
.
.
.
当对象值不总是相同时,是否可以将对象用作过滤器?
示例输入:[{"name":"Bob","age":"30"},{"name":"William","nickname":"Bill"}]
在此示例中,我希望获取 PERSON 表中的每个人,其中: 这个人的名字是鲍勃,年龄是 30 或者人名是威廉,昵称是比尔
对不起,如果这个例子有点不清楚,我已经更改了代码以使其尽可能容易地转换为其他例子。在过去的几个月里,我对 JPA 的一般知识是基本的,充其量是自学(阅读,谷歌)。对此的任何帮助将不胜感激。谢谢!!
【问题讨论】:
-
这里的
representation是什么? -
@Kalaiselvan对不起,我的错。我没有改变我所有的原始代码。出于保密原因,我更改了确切的代码并将我的对象替换为示例“Person”对象。我已经修好了,谢谢!
标签: java rest jpa predicate criteriaquery