Skip to content

Commit 17e693f

Browse files
committed
Fix Hibernate 7.3 strict parameter type checking for primitives and subquery limit/offset
Signed-off-by: Marvin Froeder <velo.br@gmail.com>
1 parent abd3b32 commit 17e693f

3 files changed

Lines changed: 19 additions & 6 deletions

File tree

querydsl-libraries/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,10 +427,10 @@ public Void visit(SubQueryExpression<?> query, Void context) {
427427
&& modifiers.isRestricting()
428428
&& templates.isSubQueryModifiersSupported()) {
429429
if (modifiers.getLimit() != null) {
430-
append(LIMIT).handle(modifiers.getLimit());
430+
append(LIMIT).handle(modifiers.getLimitAsInteger());
431431
}
432432
if (modifiers.getOffset() != null) {
433-
append(OFFSET).handle(modifiers.getOffset());
433+
append(OFFSET).handle(modifiers.getOffsetAsInteger());
434434
}
435435
}
436436

querydsl-libraries/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUtil.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,6 @@ private static void setValueWithNumberedLabel(
108108
query.setParameterList(key, collection);
109109
} else if (val instanceof Object[] objects && !BUILT_IN.contains(val.getClass())) {
110110
query.setParameterList(key, objects);
111-
} else if (val instanceof Number && TYPES.containsKey(val.getClass())) {
112-
query.setParameter(key, val, getType(val.getClass()));
113111
} else {
114112
query.setParameter(key, val);
115113
}

querydsl-libraries/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUtil.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,20 @@
2929
*/
3030
public final class JPAUtil {
3131

32+
private static final Map<Class<?>, Class<?>> PRIMITIVE_TO_WRAPPER =
33+
Map.of(
34+
int.class, Integer.class,
35+
long.class, Long.class,
36+
double.class, Double.class,
37+
float.class, Float.class,
38+
short.class, Short.class,
39+
byte.class, Byte.class);
40+
41+
@SuppressWarnings("unchecked")
42+
private static <T extends Number> Class<T> primitiveToWrapper(Class<?> type) {
43+
return (Class<T>) PRIMITIVE_TO_WRAPPER.getOrDefault(type, type);
44+
}
45+
3246
private JPAUtil() {}
3347

3448
public static void setConstants(
@@ -50,8 +64,9 @@ public static void setConstants(
5064
Parameter parameter = query.getParameter(i + 1);
5165
var parameterType = parameter != null ? parameter.getParameterType() : null;
5266
if (parameterType != null && !parameterType.isInstance(val)) {
53-
if (val instanceof Number number && Number.class.isAssignableFrom(parameterType)) {
54-
val = MathUtils.cast(number, parameterType);
67+
var targetType = primitiveToWrapper(parameterType);
68+
if (val instanceof Number number && Number.class.isAssignableFrom(targetType)) {
69+
val = MathUtils.cast(number, targetType);
5570
}
5671
}
5772
}

0 commit comments

Comments
 (0)