我有一個本地命名查詢
@NamedNativeQuery(
name = "Device.nextEuiOffset",
query = "select nextval('eui_sequence');"
)
這是在 postgres 資料庫 (11) 上運行的,并且在呼叫時會引發以下例外。
回傳型別是來自 postgres 的 bigint。
Rolling back the transaction on unhandled java.lang.ArrayIndexOutOfBoundsException:
java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at org.hibernate.orm.core@5.4.9.Final/org.hibernate.internal.AbstractSharedSessionContract.resultClassChecking(AbstractSharedSessionContract.java:952)
at org.hibernate.orm.core@5.4.9.Final/org.hibernate.internal.AbstractSharedSessionContract.createNativeQuery(AbstractSharedSessionContract.java:911)
at org.hibernate.orm.core@5.4.9.Final/org.hibernate.internal.AbstractSharedSessionContract.buildQueryFromName(AbstractSharedSessionContract.java:889)
at org.hibernate.orm.core@5.4.9.Final/org.hibernate.internal.AbstractSharedSessionContract.createNamedQuery(AbstractSharedSessionContract.java:990)
at org.hibernate.orm.core@5.4.9.Final/org.hibernate.internal.AbstractSharedSessionContract.createNamedQuery(AbstractSharedSessionContract.java:109)
at jdk.internal.reflect.GeneratedMethodAccessor115.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
查詢是使用以下內容創建的
createNamedQuery("Device.nextEuiOffset", Long.class)
本質上發生的是休眠無法確定結果型別。
在 NamedNativeQuery 定義中設定 resultClass = Long.class 失敗,因為 hibernate 期望 Entity 類作為此處的結果型別。
有人對如何正確執行此操作有任何建議嗎?
uj5u.com熱心網友回復:
不確定這是否足以滿足您的需要,但您可以給序列回傳的值一個別名并在結果集映射中參考它
@SqlResultSetMapping(
name = "Device.nextEuiOffsetResult",
columns={
@ColumnResult(
name="EUI_VAL"
)
}
)
@NamedNativeQuery(
name = "Device.nextEuiOffset",
query = "select nextval('eui_sequence') AS EUI_VAL;",
resultSetMapping = "Device.nextEuiOffsetResult"
)
命名查詢的執行如下
Long euiVal = em.createNamedQuery("Device.nextEuiOffset", BigInteger.class).getSingleResult().longValue();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/505379.html
上一篇:在多對多關系中復制元素
