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

  1. Remove or fix @Temporal on java.time fields (spec only defines it for java.util.Date/Calendar)
  2. Use a date-capable type (LocalDate, java.util.Date, Calendar) when DATE precision is required
  3. For a java.util.Date field storing date-only values, keep @Temporal(DATE) - DateJavaType supports all three precisions
  4. 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

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


AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22). Data as JSON: /api/errors/41762a485536b0dd. Report an issue: GitHub.