在Hibernate中从一对多关系中选择一个对象

时间:2010-06-08 15:02:33

标签: hibernate hql

我有两张桌子:

Job
job_id, <other data>

Job_Link
job_link_id, job_id, start_timestamp, end_timestamp, <other data>

Job_Link中可能有多个记录使用start_timestamp和end_timestamps指定相同的job_id,以指示这些记录何时被视为“当前”,保证start_timestamp和end_timestamp不会重叠。

我们有Job和Job_Link表的实体,并定义一对多关系来加载所有job_links不会有问题。但是我们想要避免这种情况,并且在Job实体中只有一个job_link项目,它只包含“当前”Job_Link对象。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

可以使用@WhereJoinTable注释。在Job实体中添加@OneToOne链接,就像在JobLink对象上定义@OneToMany一样。

@OneToOne(...)
@WhereJoinTable(clause = "now() between start_timestamp and end_timestamp") // mysql
@WhereJoinTable(clause = "sysdate between start_timestamp and end_timestamp") // oracle ...
private JobLink jobLink

缺点:它打破了数据库和JPA提供程序的可移植性