繁体   English   中英

JPQL查询时差

[英]JPQL query for time difference

我在实体REPORTED_TIME和CREATION_TIME有两个日期

我如何创建JPQL以获取重新记录的内容,其中(CREATION_TIME-REPORTED_TIME)之间的时间差仅为12小时。

我不希望我们同时使用Oracle和Postgres的任何本地查询语法。

有人可以在Oracle中查询相同的内容吗?

实体

/**
 * The persistent class for the IR_TB_INCIDENT_HDR database table.
 * 
 */
@Entity
@Table(name="IR_TB_INCIDENT_HDR")
public class IncidentHdr implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @SequenceGenerator(name="IR_TB_INCIDENT_HDR_INCIDENTID_GENERATOR", sequenceName="INCIDENT_SEQ")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="IR_TB_INCIDENT_HDR_INCIDENTID_GENERATOR")
    @Column(name="INCIDENT_ID")
    private long incidentId;


    @Temporal(TemporalType.DATE)
    @Column(name="CREATED_TIME")
    private Date createdTime;


    @Temporal(TemporalType.DATE)
    @Column(name="REPORTED_TIME")
    private Date reportedTime;



    public IncidentHdr() {
    }

    //Setter getter


}

JPA规范不包含区分日期/时间的方法。 但是您可以调用函数,这比本机查询好一点。 您必须确保datediff函数可用。

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<IncidentHdr> query = cb.createQuery(IncidentHdr.class);
Root<IncidentHdr> root = query.from(IncidentHdr.class);

Predicate max12Hour = cb
        .lessThanOrEqualTo(
                cb.function("datediff", Long.class, cb.literal("HOUR"), root.get(IncidentHdr_.createdTime),
                        root.get(IncidentHdr_.reportedTime)),
                12L);

query.select(root)
        .where(max12Hour);

return entityManager.createQuery(query).getSingleResult();

希望对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM