我在JPA中仅选择月份或年份时遇到问题
在mysql中我写的语句如下:
select * from table where Month(date) = 12 ;
并在实体bean中写下如下:
select t from table t where Month(t.date) = 12;
但它会抛出错误!!
PS:对不起我无法附上我的堆栈跟踪,因为我不在家:D
答案 0 :(得分:1)
检查此问题:JPA Date Arithmetic?
希望有所帮助
答案 1 :(得分:0)
不属于JPA,因此也属于供应商扩展的角色。大多数JPA实现都支持它...而且你没有说你正在使用哪一个。 DataNucleus肯定支持MONTH,YEAR,DAY,HOUR,MINUTE,SECOND。
答案 2 :(得分:0)
这可能有助于某人。
很少有JPA实现内置对日期/时间函数的支持。
<强>的EclipseLink 强>
EclipseLink支持EXTRACT,允许任何数据库支持的日期/时间 从日期/时间中提取的部分值。 EXTRACT功能是 数据库独立,但需要数据库支持。 EXTRACT(YEAR, model.currencyExchangeDate),但它需要EclipseLink 2.4.x
FUNC 允许从JPQL调用数据库函数。它允许调用JPQL中不直接支持的任何数据库函数。 要调用DB函数MyFunc(a,b,c),请使用FUNC('MyFunc',a,b,c)。
您可以尝试FUNC('YEAR',currencyExchangeDate)来调用'YEAR' 功能
<强>休眠强>
在HQL中,您可以拥有日期功能YEAR(日期),MONTH(日期),DAY(日期) 提取所需的细节。支持的其他时间功能是 小时(日期),分钟(日期),第二天(日期)。
标准API
CriteriaBuilder #function():为执行创建一个表达式 数据库功能。
CriteriaQuery<IptExchangeratelines> cq = cb.createQuery(IptExchangeratelines.class);
Root<IptExchangeratelines> exRateLine = cq.from(IptExchangeratelines.class);
cq.where(cb.equal(cb.function("year", Integer.class,
exRateLine.get(exRateLine_.currencyExchangeDate)), year)
.and(cb.equal(cb.function("month", Integer.class,
exRateLine.get(exRateLine_.currencyExchangeDate)), month)));