Criteria criteria = session.createCriteria(someClass.class);
if(someClass.getName() != null) {
criteria.add(Restrictions.like("name", someClass.getName());
}
概念是构造javax.persistence.predicate的数组,它只包含我们想要使用的谓词:
要查询的实体示例:
@Entity
public class A {
@Id private Long id;
String someAttribute;
String someOtherAttribute;
...
}
查询本身:
//some parameters to your method
String param1 = "1";
String paramNull = null;
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery cq = qb.createQuery();
Root<A> customer = cq.from(A.class);
//Constructing list of parameters
List<Predicate> predicates = new ArrayList<Predicate>();
//Adding predicates in case of parameter not being null
if (param1 != null) {
predicates.add(
qb.equal(customer.get("someAttribute"), param1));
}
if (paramNull != null) {
predicates.add(
qb.equal(customer.get("someOtherAttribute"), paramNull));
}
//query itself
cq.select(customer)
.where(predicates.toArray(new Predicate[]{}));
//execute query and do something with result
em.createQuery(cq).getResultList();
问题内容: 我需要制作一个使用JPA Criteria API和多个参数的搜索方法。现在的问题是,并非每个参数都是必需的。因此某些可能为null,因此不应将其包含在查询中。我已经使用CriteriaBuilder进行了尝试,但看不到如何使其工作。 使用Hibernate Criteria API,这相当容易。只需创建条件,然后添加限制。 如何使用JPA的Criteria API达到相同的目的? 问
问题内容: 我正在编写一个程序,该程序检查方法的参数数量并打印警告消息(它是一个代码编码程序)。如果标准不止于此,问题是我不知道协议编号是多少。我环顾四周,没有任何运气。谁能告诉我或至少指向我正确的方向? 问题答案: 您可以在Java中指定的参数数量没有标准限制,但是根据 “代码完成” (请参阅此文章),您应该将参数数量限制为7个左右,这会对参数产生负面影响。您代码的可读性。
问题内容: 我有一个源输入 input.txt 我想将这些输入馈入程序,如下所示: 所以我尝试使用 xargs ,但是没有运气。 它给 但我想要 任何的想法? 问题答案: 到目前为止给出的解决方案都无法正确处理包含空格的文件名。如果文件名包含“或”,有些甚至会失败。如果输入文件是由用户生成的,则应该准备好使用令人惊讶的文件名。 GNU Parallel 很好地处理了这些文件名,并为您(至少)提供了
因此,为了提供搜索功能,我可以进行多个连接。我开始使用带有@query表示法的JPQL,但我必须对每个参数进行检查,结果一团糟。我开始研究其他选项,我看到了关于QueryDSL、标准和规范的东西,但我不确定我应该关注和学习哪一个。不幸的是,我不知道很多关于这个主题,我希望有人能指出我在正确的方向,以一个很好的实现这个搜索。谢谢!
我有一个对象数组: 联系类: 我想按然后按对该数组进行排序,以防某些联系人获得相同的。 我可以按其中一个标准排序,但不能两个都选。 如何添加更多条件来对此数组进行排序?