hibernate/hibernate-orm · error · UnsupportedOperationException
getTypeName() + " as TemporalType.DATE not supported"
Error message
getTypeName() + " as TemporalType.DATE not supported"
What it means
The DATE-precision counterpart of the temporal precision checks: AbstractTemporalJavaType.resolveTypeForPrecision(TemporalType.DATE, ...) falls through to forDatePrecision, whose default implementation throws UnsupportedOperationException. Types with no date-only representation (e.g. LocalTime, OffsetTime, JdbcTimeJavaType) fail with this message.
Source
Thrown at hibernate-core/src/main/java/org/hibernate/type/descriptor/java/AbstractTemporalJavaType.java:62
case DATE -> forDatePrecision( typeConfiguration );
case TIME -> forTimePrecision( typeConfiguration );
case TIMESTAMP -> forTimestampPrecision( typeConfiguration );
};
}
}
private TemporalJavaType<T> forMissingPrecision(TypeConfiguration typeConfiguration) {
return this;
}
protected TemporalJavaType<T> forTimestampPrecision(TypeConfiguration typeConfiguration) {
throw new UnsupportedOperationException(
getTypeName() + " as TemporalType.TIMESTAMP not supported"
);
}
protected TemporalJavaType<T> forDatePrecision(TypeConfiguration typeConfiguration) {
throw new UnsupportedOperationException(
getTypeName() + " as TemporalType.DATE not supported"
);
}
protected TemporalJavaType<T> forTimePrecision(TypeConfiguration typeConfiguration) {
throw new UnsupportedOperationException(
getTypeName() + " as TemporalType.TIME not supported"
);
}
@Override
public String toString() {
return "TemporalJavaType(javaType=" + getTypeName() + ")";
}
}
View on GitHub (pinned to fad1729dce)
Solutions
- Remove or fix @Temporal on java.time fields (spec only defines it for java.util.Date/Calendar)
- Use a date-capable type (LocalDate, java.util.Date, Calendar) when DATE precision is required
- For a java.util.Date field storing date-only values, keep @Temporal(DATE) - DateJavaType supports all three precisions
- Audit mappings for copy-pasted @Temporal annotations
Example fix
// before
@Entity
public class Shift {
@Temporal(TemporalType.DATE) // LocalTime has no date precision
private LocalTime start;
}
// after
@Entity
public class Shift {
private LocalTime start; // TIME by default
} Defensive patterns
Strategy: validation
Validate before calling
for (Field f : entity.getDeclaredFields()) {
Temporal t = f.getAnnotation(Temporal.class);
if (t != null && t.value() == TemporalType.DATE && isTimeOnlyType(f.getType())) {
throw new MappingException("DATE precision invalid for " + f);
}
} Type guard
static boolean supportsDatePrecision(Class<?> fieldType) {
return Date.class.isAssignableFrom(fieldType) || Calendar.class.isAssignableFrom(fieldType)
|| fieldType == LocalDate.class || fieldType == java.sql.Date.class;
} Try / catch
try {
session.persist(event);
} catch (UnsupportedOperationException e) {
if (String.valueOf(e.getMessage()).contains("as TemporalType.DATE not supported")) {
throw new MappingException("Fix @Temporal(DATE) on time-only field", e); // fix mapping, no retry
}
throw e;
} Prevention
- Map date-only data as LocalDate without @Temporal
- Keep @Temporal exclusively on java.util.Date/Calendar fields
- Grep for @Temporal after changing any temporal field type
- Cover each temporal mapping with a persist+load round-trip test
When it happens
Trigger: @Temporal(TemporalType.DATE) (or an equivalent precision request) on a time-only field such as java.sql.Time / LocalTime / OffsetTime; also java.time.OffsetDateTime/LocalDateTime descriptors do not override forDatePrecision, so requests to narrow them to DATE throw.
Common situations: Annotating every date-ish field with the same @Temporal value by mistake; switching a field from java.util.Date (all precisions) to LocalTime but keeping @Temporal(DATE); tools/DDL validators that request DATE precision for time columns.
Related errors
- getTypeName() + " as TemporalType.TIMESTAMP not supported"
- getTypeName() + " as TemporalType.TIME not supported"
- Basic array has element type '" + componentJavaType.getTypeN
- Duplicate named query '%s'
- Duplicate named stored procedure '{}'
AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22).
Data as JSON: /api/errors/41762a485536b0dd.
Report an issue: GitHub.