A partir de Hibernate 5, si no desea depender o personalizar el dialecto, puede definir un MetadataBuilderInitializer
. Por ejemplo, para usar MySQL con un DATE_ADD
INTERVAL
de HQL, se puede definir una función personalizada llamada date_add_interval
:
public class DateAddIntervalMetadataBuilderInitializer
implements MetadataBuilderInitializer {
@Override
public void contribute(MetadataBuilder metadataBuilder,
StandardServiceRegistry serviceRegistry) {
metadataBuilder.applySqlFunction("date_add_interval",
new SQLFunctionTemplate(DateType.INSTANCE,
"DATE_ADD(?1, INTERVAL ?2 ?3)"));
}
}
También habría que poner el nombre de la clase en un archivo de recursos JAR llamado META-INF/services/org.hibernate.boot.spi.MetadataBuilderInitializer
.
Este enfoque es particularmente útil cuando se utiliza Hibernate a través de un marco como JPA y/o Spring, donde la configuración se realiza implícitamente por el marco.
Sé que puede usar una vista igual que una tabla (simplemente use mutable en el xml), pero llamar a una función sería muy útil – Zoidberg