Viv*_*han 1 spring predicate jpql querydsl spring-data-jpa
如何使用 Predicate BooleanExpression 对多对多关系进行内连接?
我有 2 个实体
public class A {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@ManyToMany(fetch = FetchType.LAZY,
cascade = { CascadeType.DETACH, CascadeType.MERGE,
CascadeType.REFRESH, CascadeType.PERSIST})
@JoinTable(name = "a_b_maps",
joinColumns = @JoinColumn(name = "a_id", nullable =
false,referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "b_id", nullable = false,
referencedColumnName = "id")
)
private Set<B> listOfB = new HashSet<B>();
}
public class B {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@ManyToMany(fetch = FetchType.LAZY,
cascade = { CascadeType.DETACH, CascadeType.MERGE,
CascadeType.REFRESH, CascadeType.PERSIST})
@JoinTable(name = "a_b_maps",
joinColumns = @JoinColumn(name = "b_id", nullable =
false,referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "a_id", nullable = false,
referencedColumnName = "id")
)
private Set<A> listOfA = new HashSet<A>();
}
Run Code Online (Sandbox Code Playgroud)
基础仓库
@NoRepositoryBean
public interface BaseRepository<E, I extends Serializable>
extends JpaRepository<E, I> {
}
Run Code Online (Sandbox Code Playgroud)
以及 A 的存储库类
public interface Arepo extends BaseRepository<A, Integer>,
QueryDslPredicateExecutor<A> {
Page<A> findAll(Predicate predicate, Pageable pageRequest);
}
Run Code Online (Sandbox Code Playgroud)
现在我想使用带有谓词查询的存储库。我需要形成一个谓词,可以根据某些给定的 B 加载 A
我试过
QA a = QA.a;
QB b = QB.b;
BooleanExpression boolQuery = null;
JPQLQuery<A> query = new JPAQuery<A>();
query.from(a).innerJoin(a.listOfB, b)
.where(b.id.in(someList));
Run Code Online (Sandbox Code Playgroud)
现在我可以形成一个JPQLQuery,但存储库需要一个谓词。如何从 JPQLQuery 获取谓词?
或者说,如何使用Predicate来实现内连接呢?
我可以在此处给出的答案的帮助下创建谓词
所以,JPQLQuery我没有使用 ,而是直接使用
a.listOfB.any()
.id.in(list);
Run Code Online (Sandbox Code Playgroud)
这就像一个魅力。
| 归档时间: |
|
| 查看次数: |
5002 次 |
| 最近记录: |