Hibernate似乎错误地使用Oracle中的Criterion API处理日期范围。 SQL查询本身似乎是正确的(从Hibernate复制并手动执行)。所以,休眠日期标准失败,但HQL工作
给出
Clazz<Bar> clazz;
Date start, end;
这失败
List<Bar> bars = sessionFactory.getCurrentSession()
.createCriteria(clazz)
.add(Restrictions.between("timestamp", start, end))
.list();
这
List<Bar> bars = sessionFactory.getCurrentSession()
.createCriteria(clazz)
.add(Restrictions.ge("timestamp", start))
.add(Restrictions.le("timestamp", end))
.list();
但这工作
List<Bar> bars = sessionFactory.getCurrentSession()
.createQuery("from Bar b where b.timestamp > ? and b.timestamp < ?")
.setDate(0, start)
.setDate(1, end)
.list();
的故障现象是:
的返回
Bar
结果的数量是相同的(正确)但在标准案件一个
Bar
与aList<Foo>
大致返回10x更多Foo
对象比对应的SQL查询确实。所有额外的Foo
对象都是相同的副本。
编辑
@Entity
public class Bar {
@Id
private String id;
@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;
@ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(
name = "bar_foo",
joinColumns = { @JoinColumn(name = "barid") },
inverseJoinColumns = { @JoinColumn(name = "fooid") }
)
private List<Foo> params;
}
@Entity
public class Foo {
@Id private String id;
}
请问您可以发布Bar类。 –
贴吧,表绑定和表 – korifey
@ Floradu88,korifey,'酒吧'发布。 –