Hibernate Criteria中最多两个Date列

时间:2015-04-27 06:51:06

标签: java hibernate hibernate-criteria

我有两个日期列,一个是createDate,另一个是modifiedDate。 现在我想要获得这两个日期列的最大值。

ProjectionList projectionList = Projections.projectionList();
projectionList.add( Projections.max("createdDate"));

如何在投影中添加其他日期。并找到两者的最大日期。 无法找到任何具体方法来执行此操作。

实体是: -

package com.xyz.DemoEntity;


import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.annotations.Formula;


@Entity
public class DemoEntity {

    private Integer id;
    private Date createdOn;
    private Date modifiedOn;

    @Formula("CASE WHEN createdOn > modifiedOn THEN createdOn ELSE modifiedOn  END")
    private Date maxDate;

    /**
     * @return the id
     */
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    public Integer getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(Integer id) {
        this.id = id;
    }

    @Column(updatable=false)
    @Temporal(TemporalType.DATE)
    public Date getCreatedOn() {
        return createdOn;
    }
    public void setCreatedOn(Date createdOn) {
        this.createdOn = createdOn;
    }

    @Temporal(TemporalType.DATE)
    public Date getModifiedOn() {
        return modifiedOn;
    }

    public void setModifiedOn(Date modifiedOn) {
        this.modifiedOn = modifiedOn;
    }

}

1 个答案:

答案 0 :(得分:2)

您应该引入一个用@Formula

注释的人工柱

喜欢这个

@Formula("CASE WHEN createDate > modifiedDate THEN createDate ELSE modifiedDate  END")
private Date maxDate;

然后使用projectionList.add( Projections.max("maxDate"));获取最大值