A partire da Hibernate 5, se non si desidera dipendere o personalizzare il dialetto, è possibile definire uno MetadataBuilderInitializer
. Ad esempio, per utilizzare MySQL DATE_ADD
con una INTERVAL
da HQL, è possibile definire una funzione personalizzata denominata 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)"));
}
}
Si sarebbe anche bisogno di mettere il nome della classe in un file di risorse JAR chiamato META-INF/services/org.hibernate.boot.spi.MetadataBuilderInitializer
.
Questo approccio è particolarmente utile quando si utilizza Hibernate tramite un framework come JPA e/o Spring, in cui la configurazione viene eseguita implicitamente dal framework.
fonte
2016-12-28 21:20:01
So che è possibile utilizzare una vista come si farebbe con una tabella (basta usare il mutevole in xml), ma chiamare una funzione sarebbe molto utile – Zoidberg