我有规格:
final String text = "%text%";
final Specifications<PersonEntity> spec = Specifications.where(
(root, query, builder) -> builder.like(builder.lower(root.join(PersonEntity_.addresses, JoinType.LEFT).get(AddressEntity_.addressLine1)), text)
).or(
(root, query, builder) -> builder.like(builder.lower(root.join(PersonEntity_.addresses, JoinType.LEFT).get(AddressEntity_.addressLine2)), text)
).or(
(root, query, builder) -> builder.like(builder.lower(root.join(PersonEntity_.addresses, JoinType.LEFT).get(AddressEntity_.city)), text)
)
Run Code Online (Sandbox Code Playgroud)
使用后:
personRepository.findAll(spec);
Run Code Online (Sandbox Code Playgroud)
在日志中,我看到,JPA创建了一个查询,它连接地址三次而不是一次.
如何编写一个只连接一次地址的规范?
Bye*_*Bye 16
我改成了:
Specifications.where(
(root, query, builder) -> {
final Join<PersonEntity, AddressEntity> addresses = root.join(PersonEntity_.address, JoinType.LEFT);
return builder.or(
builder.like(builder.lower(addresses.get(AddressEntity_.addressLine1)), text),
builder.like(builder.lower(addresses.get(AddressEntity_.addressLine2)), text),
builder.like(builder.lower(addresses.get(AddressEntity_.code)), text),
);
}
);
Run Code Online (Sandbox Code Playgroud)
现在,它只加入一次.
| 归档时间: |
|
| 查看次数: |
16960 次 |
| 最近记录: |