bru*_*uma 7 hibernate jpql criteria-api jpa-2.0
我是新JPA 2.0 Criteria API的第一次用户,当我需要将一个数字字段转换为String以将其与String参数进行比较时,我遇到了问题.原因是我想搜索部分数字,所以我在CriteriaBuilder上使用'like'.这是一个代码示例:
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery<ParcelDO> cq = cb.createQuery(ParcelDO.class);
Root<ParcelDO> parcelDO = cq.from(ParcelDO.class);
cq.select(parcelDO);
String parcelNumberId = parcelSearchDetailDO.getParcelNumberId();
if (parcelNumberId != null && !parcelNumberId.isEmpty()) {
Predicate parcelNumberIdPredicate = cb.like(
parcelDO.<Long> get("parcelNumberId").as(String.class),
parcelNumberId + "%");
if (cq.getRestriction() != null) {
cq.where(cq.getRestriction(), parcelNumberIdPredicate);
} else {
cq.where(parcelNumberIdPredicate);
}
}
Run Code Online (Sandbox Code Playgroud)
重要的是
Predicate parcelNumberIdPredicate = cb.like(
parcelDO.<Long> get("parcelNumberId").as(String.class),
parcelNumberId + "%");
Run Code Online (Sandbox Code Playgroud)
我使用Criteria API将Path转换为CriteriaBuilder上like方法所需的表达式.
现在,当我运行并执行此代码时,基础JPA 2.0实现Hibernate失败,出现以下异常:
Caused by: org.hibernate.hql.ast.QuerySyntaxException:
expecting CLOSE, found '(' near line 1, column 117
[select generatedAlias0 from domain.ParcelDO as generatedAlias0 where
cast(generatedAlias0.parcelNumberId as varchar2(255 char)) like :param0]
Run Code Online (Sandbox Code Playgroud)
在我看来,Hibernate正在生成一个不正确的JPQL.
我不知道出了什么问题,你能帮忙吗?
我使用最新的Hibernate版本(3.6.0.CR2)
谢谢
正如 axtavt 在问题的评论中所述,这是 Hibernate 3.6 中的一个错误http://opensource.atlassian.com/projects/hibernate/browse/HHH-5755
| 归档时间: |
|
| 查看次数: |
8635 次 |
| 最近记录: |