Trong ứng dụng của tôi, tôi sử dụng Hibernate với cơ sở dữ liệu SQL Server, vì vậy tôi đặtLàm thế nào để có được Hibernate phương ngữ trong thời gian chạy
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect">
trong persistence.xml tôi.
Trong một số trường hợp, tôi muốn sắp xếp bản ghi với NULL bao gồm, tôi sử dụng từ khóa NULLS FIRST.
Bởi vì nó không được hỗ trợ theo mặc định bởi CriteriaQuery/CriteriaBuilder trong Hibernate, sau đó tôi sử dụng Interceptor để sửa đổi truy vấn gốc.
Vấn đề là, NULLS khóa FIRST không được hỗ trợ trong SQL Server, vì vậy tôi sử dụng từ khoá:
case when column_name is null then 0 else 1 end, column_name
Nếu tôi muốn di chuyển cơ sở dữ liệu từ SQL Server để Oracle (ví dụ), sau đó tôi cần phải đặt nếu -trên trong Interceptor của tôi, chọn phương ngữ mà tôi đang sử dụng, đúng không?
Đây là cách tôi minh họa cho họ:
String dialect = ..............
if (dialect.equals("org.hibernate.dialect.SQLServerDialect")) { // get SQL Server dialect
// put keyword "case when column_name is null then 0 else 1 end, column_name"
} else {
// put keyword "NULLS FIRST/LAST"
}
Làm thế nào tôi có thể nhận được các cấu hình phương ngữ (trong persistence.xml) trong thời gian chạy?
một liên kết về từ khóa NULLS FIRST: https://hibernate.atlassian.net/browse/HHH-465 – danisupr4
tôi sử dụng Interceptor dựa trên bài viết này: http://stackoverflow.com/questions/3683174/hibernate- order-by-with-nulls-last – danisupr4
Các liên kết này có thể giúp bạn lấy thông tin phương ngữ từ SessionFactory; [link1] (http://stackoverflow.com/questions/1571928/retrieve-auto-detected-hibernate-dialect) và [link2] (http://stackoverflow.com/questions/8742617/resolve-sql-dialect-using -hibernate) –