Kể từ Hibernate 5, nếu bạn không muốn phụ thuộc vào hoặc tùy chỉnh phương ngữ, bạn có thể xác định MetadataBuilderInitializer
. Ví dụ, để sử dụng MySQL DATE_ADD
với một INTERVAL
từ HQL, bạn có thể định nghĩa một hàm tùy chỉnh được gọi 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)"));
}
}
Bạn cũng sẽ cần phải đặt tên của lớp trong một tập tin tài nguyên JAR gọi META-INF/services/org.hibernate.boot.spi.MetadataBuilderInitializer
.
Cách tiếp cận này đặc biệt hữu ích khi sử dụng Hibernate thông qua một khung công tác như JPA và/hoặc Spring, nơi cấu hình được thực hiện hoàn toàn bởi khung công tác.
Nguồn
2016-12-28 21:20:01
Tôi biết bạn có thể sử dụng chế độ xem giống như bảng (chỉ cần sử dụng trong xml), nhưng để gọi hàm sẽ rất tiện dụng – Zoidberg