Hibernate HQL可以对日期字段进行减法或求和吗?
A有两个实体。例如定时设置和顺序Hibernate HQL可以对日期字段进行减法或求和吗?,hibernate,timestamp,hql,Hibernate,Timestamp,Hql,A有两个实体。例如定时设置和顺序 @Entity public class TimingSettings{ @Basic private Long orderTimeout = 18000; //for example 18000 sec .... } @Entity public class Order{ @Basic @OneToOne private TimingSettings timingSettings; @Tempo
@Entity
public class TimingSettings{
@Basic
private Long orderTimeout = 18000; //for example 18000 sec
....
}
@Entity
public class Order{
@Basic
@OneToOne
private TimingSettings timingSettings;
@Temporal(value = TemporalType.TIMESTAMP)
@Column(nullable = false)
protected Date time;
....
}
我不能选择timeout before并计算所需的订单时间,因为我不知道哪些订单有哪些定时设置
我可以执行与以下相同的HQL吗:
select o from order o
left join o.timingSettings ts
where o.time < current_timestamp()+ ts.orderTimeout
从订单o中选择o
左连接o.TimingTS设置
其中o.time
问题在于算术和时间戳,请检查此项以了解一些想法。这取决于您是否需要它在所有数据库中工作
在后一种情况下(特定数据库),请检查您的方言是否有可用的日期函数。
例如,MySQL方言支持和函数,允许您将查询编写为:
select o from order o
left join o.timingSettings ts
where time_to_sec(timediff(o.time, current_timestamp())) < ts.orderTimeout
从订单o中选择o
左连接o.TimingTS设置
其中time_至_秒(timediff(o.time,current_timestamp())
如果您需要对所有数据库执行此操作(或者如果您的数据库不支持所需的日期函数),Hibernate支持跨所有方言的函数。使用这些将使您的查询变得相当冗长:-)此外,您还将遇到DST问题