我想用createNativeQuery從我的數據庫中獲取結果集並將其映射到實體對象列表。JPA createNativeQuery不映射到實體類
當我做
List<MyObject> results = this.em.createNativeQuery(query, MyClass.class).getResultList();
我最終實體對象的數組,它是正確的大小,並且被映射到的列正確的,但它們都是同一個對象。返回的第一個結果將爲我列表中的每個條目重複。
在你上面的圖片可以看到,我找回數據,如果我檢查ovbjects他們正確映射到我的專欄。但他們都是同一個對象。
但如果我不
List<Object[]> objects = this.em.createNativeQuery(query, Object.class).getResultList();
我得到不同的對象的列表像它應該是。但它們沒有映射到我的實體類。
在上面的PIC,你可以看到,當我使用Object
和我的實體類類型的代替,我得到的結果集不同的對象返回的每個行。我無法弄清楚爲什麼當我使用我的實體類時,它只是一遍又一遍地重複同一行。
有誰知道什麼可能導致我每次都得到同一個對象的列表?
我的查詢是從流水線功能在存儲過程中選擇
String query = "select * from table(myschema.mypackage.myfunction(input_var))";
UPDATE
我我的過程中調用該管道函數返回大約200行。出於測試目的,我只映射了前幾列。
我的實體類有200列的前13列的映射。 我的查詢調用該函數的做法是select *
,所以它返回了所有200列並映射了前13個。我認爲這是一個可能的問題,但我只是用一個新的測試類來做這個測試,並且做了一個select *
從常規錶轉換爲只有2個映射列的實體。沒有問題。它返回了不同對象的列表。
我的結論是,必須有一些東西阻止Hibernate遍歷流水線函數的結果集。它返回正確數量的行,但它卡在第一行,並且只是反覆創建該對象。
不似乎有什麼與我的列映射
你能顯示你的查詢嗎? – fg78nc
@ fg78nc我加了一個例子。這是爲了工作,我不能發佈明確的代碼。我正在調用存儲過程中的流水線功能。我的實體類被映射到流水線函數返回的列名。當我不提供我的實體類時,一切正常。但是當我提供它時,它只會重複同一個對象。該對象是流水線函數返回的第一行。 –
SQL字符串中的列別名是否與單個實體的列映射直接匹配? – fg78nc