JPA - CriteriaBuilder - 整数排序

时间:2015-08-12 12:03:57

标签: java jpa

我想对一些Integer字段进行排序,但开箱即用的CriteriaBuilder将我的查询命令为字符串:

示例(从小到大): 1 - 10 - 5

我怎么能解决这个问题?我可以在查询中添加比较器或其他内容吗?

代码:

CriteriaBuilder cb = em().getCriteriaBuilder();
CriteriaQuery<MessageLog> cq = cb.createQuery(MessageLog.class);
Root<MessageLog> messageLogRoot = cq.from(MessageLog.class);
cq.select(messageLogRoot);

Path<?> path = getPath(sortField, messageLogRoot);
cq.orderBy(cb.asc(path));

 private Path<?> getPath(String sortField, Root<MessageLog> messageLogRoot) {
    Path<?> path;
    if (sortField == null) {
        return messageLogRoot.<Date>get("sendDate");
    }
    switch (sortField) {
        case "messageTypeCode":
            path = messageLogRoot.<Integer>get("messageTypeCode");
            break;
        default:
            path = messageLogRoot.<MessageLogStatus>get("messageLogStatus");
    }
    return path;
}

注意:对于日期和我的枚举,我遇到了同样的问题。我正在使用JPA 2.0

编辑:

MessageLog实体:

@Entity
@Table(name = "MESSAGE_LOG")
public class MessageLog extends Domain {

   private static final long serialVersionUID = -2051028296593954613L;

   @Column(name = "SEND_DATE")
   @Temporal(TemporalType.TIMESTAMP)
   @NotNull
   private Date sendDate;

   @Column(name = "MESSAGE_TYPE_CODE")
   @NotNull
   private Integer messageTypeCode;

   @Column(name = "MESSAGE_LOG_STATUS")
   @NotNull
   @Enumerated(EnumType.STRING)
   private MessageLogStatus messageLogStatus;

0 个答案:

没有答案