我想从数据库中的一行中提取年份部分,以便将其与值进行比较。
这是我的功能
public List<Dossier> getAllDossierParAn() {
Date date = new Date();
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
int strI = calendar.get(Calendar.YEAR);
TypedQuery<Dossier> query;
query = em.createQuery("SELECT d FROM DOSSIER d WHERE EXTRACT(YEAR ,d.dateCreation)=2015", Dossier.class);
System.out.println(strI);
return query.getResultList();
}
Run Code Online (Sandbox Code Playgroud)
我总是得到
在 EntityManager 中创建查询时发生异常:异常描述:编译 [SELECT d FROM DOSSIER d WHERE EXTRACT(YEAR FROM d.dateCreation)=2015] 时出现问题。[14, 21] 抽象模式类型“DOSSIER”未知。[48, 62] 状态字段路径“d.dateCreation”无法解析为有效类型。
我直接在数据库中测试,可以用
select * from dossier where extract(year from date_creation)=2015
Run Code Online (Sandbox Code Playgroud)
我正在使用jpaand作为ejbIDE jdeveloper。
首先,您的查询的主要问题是错误消息的内容:
抽象模式类型“DOSSIER”未知
由于 JPA 将 POJO 映射为实体,因此它们的名称区分大小写。您的查询应该是:
SELECT d FROM Dossier d WHERE ...
另外,关于你提到的问题,EXTRACT据我所知,该功能仅EclipseLink支持。根据错误消息,我认为这是您的 JPA 实现,但如果不是,有两种选择:
YEAR(date)、MONTH(date)、DAY(date)、HOUR(date)和MINUTE(date)。SECOND(date)SUBSTRING:来解决SUBSTRING(d.dateCreation, 1, 4)。注意字符串的第一个位置用 1 表示;希望能帮助到你
“直接在数据库中”称为SQL。
createQuery接受 JPQL 而不是 SQL,并且 YEAR / EXTRACT 是无效关键字(尽管某些 JPA 提供程序支持 YEAR,但不支持 EXTRACT)。任何像样的 JPA 文档都会阐明这一点。
| 归档时间: |
|
| 查看次数: |
25846 次 |
| 最近记录: |