gpt4 book ai didi

具有不同参数的 Spring data JPA 查询

转载 作者:行者123 更新时间:2023-12-02 08:39:52 24 4
gpt4 key购买 nike

我试图通过几个参数找到表格中必要的元素,例如

List <Person> findByLastname(String lastname);

但是如果将来添加/删除其中一些参数怎么办?如何使用 Spring Data JPA 使某些参数可选,如下所示

List <Person> findByOptionalLastnameAndOptionalFirstNameAnd...(String lastname, String firstname,...);

最佳答案

我的任务是通过使用 querydsl framework 解决的。如果使用gradle,则需要添加thisbuild.gradle中:

dependencies {
compile "com.mysema.querydsl:querydsl-jpa:3.6.3"

compile "com.mysema.querydsl:querydsl-apt:3.6.3:jpa" // Magic happens here

compile "org.hibernate:hibernate-entitymanager:4.3.5.Final"

compile 'com.h2database:h2:1.4.187'
}

也可以使用 JPA Criteria API,很好的例子是 here很好的教程是 here .

@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();

关于具有不同参数的 Spring data JPA 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36858956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com