我有一個這樣的映射物體:
@OneToMany(targetEntity = Child.class)
@JoinColumn(name = "PARENT_ID", referencedColumnName = "PARENT_ID")
@OrderBy("orderNumber")
private List<Child> children;
我想在我的映射集合NULLS LAST的注釋中指定。@OrderBy
我正在使用 Oracle 資料庫,它認為 NULL 值大于任何非 NULL 值。問題出在我的集成測驗中,它使用 h2 資料庫,似乎 NULL 值的評估方式不同。
到目前為止,我想出了一個在這樣nvl2()的內部使用函式的技巧:@OrderNumber
@OrderBy("nvl2(orderNumber, orderNumber, 100000000)")
這個 hack 有效,但它看起來很討厭,我不喜歡僅僅因為集成測驗而我有這段代碼的想法。正如我上面提到的,Oracle 默認以正確的順序回傳行,所以基本@OrderBy(orderNumber)不處理空值的效果很好。另一方面,我想對其進行測驗,以防應用程式使用不同的資料庫。
有什么辦法可以更好地解決這個問題?
uj5u.com熱心網友回復:
要在 H2 中啟用 Oracle 兼容模式,您需要;MODE=Oracle;DEFAULT_NULL_ORDERING=HIGH按照檔案中的建議附加到 JDBC URL:
https ://h2database.com/html/features.html#compatibility
該DEFAULT_NULL_ORDERING設定更改了值的默認順序NULL(當既不使用NULLS FIRST也不NULLS LAST使用時)。有四個可能的選項,LOW是默認的。
如果不需要,可以不使用此兼容模式單獨使用此設定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/440782.html
下一篇:如何在方法結束時關閉連接
