hibernate/hibernate-orm · error · UnsupportedOperationException
format() function not supported on Sybase
Error message
format() function not supported on Sybase
What it means
appendDatetimeFormat is called whenever Hibernate renders the pattern of a datetime formatting function, i.e. the HQL format() function. SybaseLegacyDialect (Sybase ASE) throws UnsupportedOperationException because ASE's CONVERT styles cannot express arbitrary Java-style format patterns, so any query using format() fails during SQL translation.
Source
Thrown at hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SybaseLegacyDialect.java:507
public boolean supportsFractionalTimestampArithmetic() {
return false;
}
@Override
public String timestampaddPattern(TemporalUnit unit, TemporalType temporalType, IntervalType intervalType) {
//TODO!!
return "dateadd(?1,?2,?3)";
}
@Override
public String timestampdiffPattern(TemporalUnit unit, TemporalType fromTemporalType, TemporalType toTemporalType) {
//TODO!!
return "datediff(?1,?2,?3)";
}
@Override
public void appendDatetimeFormat(SqlAppender appender, String format) {
throw new UnsupportedOperationException( "format() function not supported on Sybase");
}
@Override
public boolean supportsStandardCurrentTimestampFunction() {
return false;
}
@Override
public IdentifierHelper buildIdentifierHelper(IdentifierHelperBuilder builder, DatabaseMetaData metadata)
throws SQLException {
if ( metadata == null ) {
builder.setUnquotedCaseStrategy( IdentifierCaseStrategy.MIXED );
builder.setQuotedCaseStrategy( IdentifierCaseStrategy.MIXED );
}
return super.buildIdentifierHelper( builder, metadata );
}
View on GitHub (pinned to fad1729dce)
Solutions
- Format in Java after fetching (DateTimeFormatter) instead of in the query
- Use extraction functions ASE supports: year(e.created), month(e.created), day(e.created)
- Extend SybaseLegacyDialect and override appendDatetimeFormat to map a subset of patterns to convert(varchar, x, style)
- Use a native query with ASE convert(varchar, datecol, style)
Example fix
// before
List<String> days = em.createQuery(
"select format(e.created, 'yyyy-MM-dd') from Event e", String.class).getResultList();
// after: format in Java
List<LocalDateTime> created = em.createQuery(
"select e.created from Event e", LocalDateTime.class).getResultList();
String day = created.get(0).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); Defensive patterns
Strategy: fallback
Validate before calling
// Guard: do not emit format() when the dialect cannot render datetime patterns Dialect d = sessionFactory.getJdbcServices().getDialect(); boolean canFormat = !(d instanceof SybaseLegacyDialect); // if (!canFormat) fetch raw timestamps and format with DateTimeFormatter in Java
Try / catch
try {
return em.createQuery("select format(e.created,'yyyy-MM-dd') from Event e", String.class)
.getResultList();
} catch (UnsupportedOperationException e) {
if (e.getMessage() != null && e.getMessage().contains("format()")) {
return formatInJava(em.createQuery("select e.created from Event e", LocalDateTime.class)
.getResultList());
}
throw e;
} Prevention
- Default to formatting dates in Java; use in-query formatting only where all target dialects support it
- For date-based grouping, use year()/month()/day() extraction instead of format()
- If ASE must format in SQL, extend SybaseLegacyDialect with a convert(varchar, x, style) implementation
When it happens
Trigger: HQL such as `select format(e.created, 'yyyy-MM-dd') from Event e` (or Criteria format() calls) executed with SybaseLegacyDialect; anything else that routes a datetime format pattern through appendDatetimeFormat.
Common situations: Applications ported from Oracle/MySQL where to_char/format work; date truncation/grouping done via formatting in the query; Hibernate 5 to 6 migrations that previously used custom dialect tweaks.
Related errors
- format() function not supported on Derby
- format() function not supported on Derby
- format() function not supported on Firebird
- GaussDB not support datetime format yet
- Unsupported unit for TIMESTAMPADD:
AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22).
Data as JSON: /api/errors/cd7b3184a8925e15.
Report an issue: GitHub.