【发布时间】:2011-09-16 04:21:24
【问题描述】:
为什么 Hibernate 抱怨以下查询:
public Set<Long> findImageVariantIdsWithOutOfBoundsDimension() {
final StringBuilder queryBuilder = new StringBuilder();
queryBuilder.append("select id from ImageVariant where ");
// imageVariantType is something like R_110X75 with 110 being max x.
// cast(substring( extracts 110.
queryBuilder.append("dimensionX > cast(substring(imageVariantType, 3, locate('X', imageVariantType) - 3), int) ");
queryBuilder.append("or ");
// imageVariantType is something like R_110X75 with 75 being max y.
// cast(substring( extracts 75.
queryBuilder.append("dimensionY > cast(substring(imageVariantType, locate('X', imageVariantType) + 1), int)");
final Query query = getEntityManager().createQuery(queryBuilder.toString());
@SuppressWarnings("unchecked")
final Set<Long> result = new HashSet<Long>(query.getResultList());
return result;
}
警告是Function template anticipated 3 arguments, but 2 arguments encountered。但是,我的查询既不包含标记也不包含参数。由于cast 是一个特定于 Hibernate 的函数(JPQL 中没有字符串到整数的转换),我认为这是一个 HQL 问题。
当我调试 Hibernate 的 TemplateRenderer 时,我看到它的内部参数列表是 ['X', imagevaria0_.imagevarianttype]。
【问题讨论】:
-
一些类似的问题solitarygeek.com/java/…