有没有人知道为什么下面的sqlRestriction
不工作。我正在使用本机Oracle trunc(..)
函数来修剪日期的时间部分。
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(Publication.class);
// Some other, non-SQL restrictions...
criteria.add(Restrictions.sqlRestriction("trunc(pubmedImportDate) >= ?",
todayMinus24Months,
org.hibernate.type.StandardBasicTypes.DATE));
错误:由: java.sql.SQLSyntaxErrorException: ORA-00904:“PUBMEDIMPORTDATE”引起:无效标识符
查询基于具有此字段的域类Publication
,
public class Publication implements java.io.Serializable {
//...
private Date pubmedImportDate;
//..
public Date getPubmedImportDate() {
return this.pubmedImportDate;
}
public void setPubmedImportDate(Date pubmedImportDate) {
this.pubmedImportDate = pubmedImportDate;
}
}
我需要在pubmedImportDate
前加上别名吗?我看到pubmedImportDate
从未链接到Hibernate的别名this_
。
我试过这两种:
Criteria criteria = session.createCriteria(Publication.class);
Criteria criteria = session.createCriteria(Publication.class, "p"); // with p.pubmedImportDate
但是,查询总是如下所示:
from
PUBLICATIONS_T this_
...
trunc(p.pubmedImportDate) >= ?
如何将其连接到this_
发布于 2022-09-20 16:03:29
我找到了解决方案:必须使用{alias}.column_name
将其链接到this_
criteria.add(Restrictions.sqlRestriction("trunc({alias}.pubmed_import_date) >= ?",
todayMinus24Months,
org.hibernate.type.StandardBasicTypes.DATE));
还要注意,它必须是真正的DB列名(pubmed_import_date
),而不是类属性(pubmedImportDate
)。
https://stackoverflow.com/questions/73788622
复制相似问题