【发布时间】:2020-04-27 11:40:58
【问题描述】:
我想选择具有不同电子邮件的行,请参见下面的示例表:
+----+---------+-------------------+-------------+
| id | title | email | commentname |
+----+---------+-------------------+-------------+
| 3 | test | rob@hotmail.com | rob |
| 4 | i agree | rob@hotmail.com | rob |
| 5 | its ok | rob@hotmail.com | rob |
| 6 | hey | rob@hotmail.com | rob |
| 7 | nice! | simon@hotmail.com | simon |
| 8 | yeah | john@hotmail.com | john |
+----+---------+-------------------+-------------+
期望的结果是:
+----+-------+-------------------+-------------+
| id | title | email | commentname |
+----+-------+-------------------+-------------+
| 3 | test | rob@hotmail.com | rob |
| 7 | nice! | simon@hotmail.com | simon |
| 8 | yeah | john@hotmail.com | john |
+----+-------+-------------------+-------------+
我不在乎返回哪个 id 列值。可以为此使用什么 JPA 规范?
这里是规范类,
public class UserSearchSpecification implements Specification<UserSearch> {
private static final Logger LOGGER = LogManager.getLogger(UserSearchSpecification.class);
private static final long serialVersionUID = 1L;
private List<SearchCriteria> list;
/**
* Custom JPA Specification Constructor
*
*/
public UserSearchSpecification() {
this.list = new ArrayList<>();
}
public void add(SearchCriteria criteria) {
list.add(criteria);
}
@Override
public Predicate toPredicate(Root<UserSearch> root, CriteriaQuery<?> arg1, CriteriaBuilder builder) {
//create a new predicate list
List<Predicate> predicates = new ArrayList<>();
//add add criteria to predicates
for (SearchCriteria criteria : list) {
if (criteria.getOperation() == (SearchOperation.GREATER_THAN)) {
predicates.add(builder.greaterThan(
root.get(criteria.getKey()), criteria.getValue().toString()));
} else if (criteria.getOperation() == (SearchOperation.LESS_THAN)) {
predicates.add(builder.lessThan(
root.get(criteria.getKey()), criteria.getValue().toString()));
} else if (criteria.getOperation() == (SearchOperation.GREATER_THAN_EQUAL)) {
predicates.add(builder.greaterThanOrEqualTo(
root.get(criteria.getKey()), criteria.getValue().toString()));
}
}
return builder.and(predicates.toArray(new Predicate[0]));
}
}
【问题讨论】:
-
在你的仓库界面中使用
@Query -
@GolamMazidsajib 我正在为此编写规范。你能就此提出建议吗?
-
但这并不是不同的工作方式。不同的只有电子邮件和评论名
-
显示你的规范类
-
@SimonMartinelli 我只是以上表为例。我有一张不同的桌子,这只是一个用例。
标签: spring-boot jpa spring-data-jpa