我正在尝试通过querydsl网络支持对实体中的任何属性进行排序,这对于第一级属性来说效果很好。另一方面,当尝试通过@ManyToOne注释的属性进行排序时,将忽略通过URL发送的参数。
这种行为甚至可以通过querydsl实现吗?如果是这样的话: 是否需要任何设置/配置才能使querydsl支持此操作?
假设用户实体为:
@Data
@Entity
@Audited
@EntityListeners(AuditingEntityListener.class)
@AuditOverride(forClass = Auditable.class)
public class User extends Auditable implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@ManyToOne
@JoinColumn(name = "type_id", nullable = true, foreignKey =
@ForeignKey(name = "type_id"))
private Type type;
}
那么类型是:
@Data
@Entity
@Audited
@EntityListeners(AuditingEntityListener.class)
@AuditOverride(forClass = Auditable.class)
public class User extends Auditable implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String typeName;
}
这里是User
的仓库:
@RepositoryRestResource
public interface UserRepository extends JpaRepository<User, Long>,
QuerydslPredicateExecutor<User>, QuerydslBinderCustomizer<QUser> {
@Override
public default void customize(QuerydslBindings bindings, QUser root){
bindings.bind(String.class)
.first((SingleValueBinding<StringPath, String>) StringExpression::containsIgnoreCase);
}
}
我希望调用/users?sort=type.typeName,desc
会以按typeName降序排列的排序用户列表作为响应,但是参数只会被忽略。
sort
可能不是querydsl期望的参数,但是我无法找到Web支持的允许谓词列表。