OrderBy 不适用于 Spring Data JPA 中的 In 子句
OrderBy is not working with the In clause in Spring Data JPA
我有一个签名是这样的方法。
public Page<Config> searchByCriteria(Map<String, String> params, Pageable pageable) {
//prework
if (zoneIds.equals(BLANK_STRING)) {
return repository.findByUserIdAndNameContains(userId, name, pageable);
}
List<Integer> zones = Arrays
.stream(zoneIds.split(","))
.distinct()
.map(Integer::parseInt)
.collect(toList());
return repository.findByUserIdEqualsAndNameContainsAndZonesInAndOrderByUpdatedOnDesc(userId, name, zones, pageable);
}
此处,当附加 OrderBy 子句时,第二个查询不起作用。
但是,当我删除 OrderBy 子句时它工作正常。
eg: repository.findByUserIdEqualsAndNameContainsAndZonesIn(...) This works fine.
请建议我如何一起使用 In 和 OrderBy 子句。
这是我在堆栈跟踪中得到的错误。
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property inAnd found for type Integer! Traversed path:
配置对象
@Entity
public class Config extends AbstractEntity implements Serializable {{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer configId;
private Integer userId;
private String name;
@Enumerated(EnumType.STRING)
private State state;
@ElementCollection
@CollectionTable(name = "zone", joinColumns = @JoinColumn(name = "config_id"))
@Column(name = "zone_id")
private Set<Integer> zones = new HashSet<>();
@Valid
@ElementCollection
@CollectionTable(name = "param", joinColumns = @JoinColumn(name = "config_id"))
private Set<ApParam> apParams = new HashSet<>();
private String remarks;
//getter
//setter
}
我认为问题在于您将方法查询和排序依据与 And 连接起来。这应该有效:repository.findByUserIdEqualsAndNameContainsAndZonesInOrderByUpdatedOnDesc(userId, name, zones, pageable);
示例:https://www.baeldung.com/spring-data-sorting#1-sorting-with-the-orderby-method-keyword
文档参考:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
我有一个签名是这样的方法。
public Page<Config> searchByCriteria(Map<String, String> params, Pageable pageable) {
//prework
if (zoneIds.equals(BLANK_STRING)) {
return repository.findByUserIdAndNameContains(userId, name, pageable);
}
List<Integer> zones = Arrays
.stream(zoneIds.split(","))
.distinct()
.map(Integer::parseInt)
.collect(toList());
return repository.findByUserIdEqualsAndNameContainsAndZonesInAndOrderByUpdatedOnDesc(userId, name, zones, pageable);
}
此处,当附加 OrderBy 子句时,第二个查询不起作用。
但是,当我删除 OrderBy 子句时它工作正常。
eg: repository.findByUserIdEqualsAndNameContainsAndZonesIn(...) This works fine.
请建议我如何一起使用 In 和 OrderBy 子句。
这是我在堆栈跟踪中得到的错误。
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property inAnd found for type Integer! Traversed path:
配置对象
@Entity
public class Config extends AbstractEntity implements Serializable {{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer configId;
private Integer userId;
private String name;
@Enumerated(EnumType.STRING)
private State state;
@ElementCollection
@CollectionTable(name = "zone", joinColumns = @JoinColumn(name = "config_id"))
@Column(name = "zone_id")
private Set<Integer> zones = new HashSet<>();
@Valid
@ElementCollection
@CollectionTable(name = "param", joinColumns = @JoinColumn(name = "config_id"))
private Set<ApParam> apParams = new HashSet<>();
private String remarks;
//getter
//setter
}
我认为问题在于您将方法查询和排序依据与 And 连接起来。这应该有效:repository.findByUserIdEqualsAndNameContainsAndZonesInOrderByUpdatedOnDesc(userId, name, zones, pageable);
示例:https://www.baeldung.com/spring-data-sorting#1-sorting-with-the-orderby-method-keyword
文档参考:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation