【发布时间】:2016-01-11 13:23:39
【问题描述】:
我正在使用 Spring Data Specifications and Sort APIs(我的存储库是 JpaSpecificationExecutor),我的数据模型看起来像这样(精简了一点)
@Entity
public class Message extends AbstractVersionedEntity {
@OneToMany
private Set<MessageOwner> messageOwners = new HashSet<>();
}
@Entity
public class MessageOwner extends AbstractVersionedEntity {
@ManyToOne
private Mailbox owner;
@Enumerated(EnumType.STRING)
private MessageOwnerType type;
}
@Entity
public class Mailbox extends AbstractVersionedEntity {
@Column(unique=true)
private String ldapId;
}
我需要按收件人对消息进行排序 - 即按 MessageOwnerType.TO 类型的 messageOwners 邮箱的 ldapId。
message->messageOwners(type=TO)->owner->ldapId
此外,应为每条消息对收件人进行排序 - 如果有多个 messageOwner 类型为 MessageOwnerType.TO,则应选择按字母顺序排列的第一个作为消息的排序值,可以这么说。
在纯 SQL 中,我可能会使用某种子查询来执行此操作。是否可以使用 Spring Data Specifications & Sort 对象进行类似的操作?除非必须,否则我宁愿不必重写 QueryDSL/raw Criteria 中的所有内容。
【问题讨论】:
-
您是否总是希望数据按该顺序排序?还是只有一次?如果是前者,请在实体上添加@OrderBy。
标签: java spring sorting spring-data spring-data-jpa