A有两个实体。例如,时间设置和订单。
@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;
....
}
我无法在之前选择超时并计算所需的订单时间,因为我不知道哪些订单有什么时序设置。
Haw我可以执行与以下相同的HQL:
select o from order o
left join o.timingSettings ts
where o.time < current_timestamp()+ ts.orderTimeout
答案 0 :(得分:2)
这取决于您是否需要在所有数据库中使用它。
在后一种情况下(特定数据库),检查您的方言的可用日期功能。
例如,MySQL方言支持timediff()
和time_to_sec()
函数,这些函数允许您将查询编写为:
select o from order o
left join o.timingSettings ts
where time_to_sec(timediff(o.time, current_timestamp())) < ts.orderTimeout
如果您需要对所有数据库执行此操作(或者如果您的数据库不支持所需的日期函数),则Hibernate支持所有方言的year(), month(), ... second()函数。使用这些将使您的查询相当冗长:-)加上您将遇到DST问题。
答案 1 :(得分:0)
问题在于算术和时间戳,请查看thread以获取一些想法。