網路上的每個示例/教程都涉及物體類,當涉及到存盤程序(函式)時,SP 僅從該物體收集資料。雖然很常見,但我們有一個涉及多個表的復雜查詢,并且我們希望回傳一些列。為此,我們可以在 postgresql 中使用帶或不帶任何引數的函式。
我有這段代碼可以呼叫這樣的函式:
@Component
public class CapPlanningItemPerCapGroupImpl implements CapPlanningItemPerCapGroupRepository {
private final EntityManager em;
public CapPlanningItemPerCapGroupImpl(EntityManager em) {
this.em = em;
}
@Override
public List<CapPlanningItemPerCapGroup> getCapPlanningItems(Long companyId, Long plantId, int year, Long costAccTypeId) {
Session session = em.unwrap(Session.class);
NativeQuery<CapPlanningItemPerCapGroup> query = session.createNativeQuery(
"SELECT * FROM get_cap_planning_items(:year, :companyId, :plantId, :costAccTypeId)", CapPlanningItemPerCapGroup.class);
query.setParameter("year", year);
query.setParameter("companyId", companyId);
query.setParameter("plantId", plantId);
query.setParameter("costAccTypeId", costAccTypeId);
return query.getResultList();
}
}
該類CapPlanningItemPerCapGroup沒有用 注釋@Entity,因為我不想將它作為資料表存盤在資料庫中。這就像一個自定義型別。但是有了這個設定,上面的查詢就失敗了,說那CapPlanningItemPerCapGroup是一個未知的物體。
如果我CapPlanningItemPerCapGroup.class從查詢呼叫中洗掉它,我會在郵遞員中得到結果,但當然沒有任何欄位名稱,只有原始資料。
所以,我的問題是:我真的需要手動將結果串列轉換為 appr. 型別別,或者是否有任何開箱即用的映射自動化,我不必列出所有回傳的列名和型別?
謝謝。
uj5u.com熱心網友回復:
您可以使用 an@SqlResultSetMapping來描述 Hibernate 將為結果集中的每條記錄執行的建構式呼叫。我在我的博客上的結果集映射:建構式結果映射中詳細解釋了這一點。
總體思路很簡單:
您CapPlanningItemPerCapGroup需要一個設定所有屬性的建構式。
在 中@SqlResultSetMapping,您通過參考類來描述建構式呼叫,并按照您希望將它們提供給建構式的順序列出結果集中的列,例如:
@SqlResultSetMapping(
name = "BookValueMapping",
classes = @ConstructorResult(
targetClass = BookValue.class,
columns = {
@ColumnResult(name = "id", type = Long.class),
@ColumnResult(name = "title"),
@ColumnResult(name = "version", type = Long.class),
@ColumnResult(name = "authorName")}))
定義映射后,您可以將其名稱作為createNativeQuery方法的第二個引數提供。
List<BookValue> results = this.em.createNativeQuery("SELECT b.id, b.title, b.version, a.firstName || a.lastName as authorName FROM Book b JOIN Author a ON b.author_id = a.id", "BookValueMapping").getResultList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/447262.html
上一篇:區分目錄是否存在和權限錯誤
