簡體   English   中英

JPA 在本機查詢中調用 function 正在發送多個參數而不是 UUID 集合

[英]JPA calling function in a native query is sending multiple parameters instead a UUID Collection

我創建了一個 PostgreSQL function 從 UUID 數組中獲取一些數據。

IE:

create function journey_statistics(journey_ids uuid[])
returns TABLE(project_id uuid, project_name character varying,...)
language plpgsql

如果我運行下一個 sql 語句,它將返回預期的數據:

select * from journey_statistics(array['0f36c7a5-04eb-4329-8e93-a13625a4ffa6'::uuid, 'bc10ee72-7b7f-4bbd-a70a-75477b484d58'::uuid])

但是,當我在 Java 上實現它並運行它時。 我收到下一個錯誤:

o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: function journey_statistics(uuid, uuid) does not exist

Hint: No function matches the given name and argument types. You might need to add explicit type casts.

這是我用來調用它的本機查詢。 而且我在其他類似的功能中也使用過相同的功能,沒有錯誤。 所以我無法理解問題是什么或我做錯了什么。

@Query(value = "select cast(project_id as varchar(36)) as projectId, project_name as projectName, cast(project_leader as varchar(36)) as projectLeader" +
        " from journey_statistics(:uuids)", nativeQuery = true)
Collection<JourneyStatisticsView> getJourneyStatisticsById(Collection<UUID> uuids);

我試圖將數據轉換為數組,但看起來它正在轉換為記錄 [] 數組。 但更奇怪的是,如果我傳遞一個字符串集合然后我嘗試將它們轉換為我得到

function Journey_statistics(字符變化,字符變化)不存在

任何幫助表示贊賞,謝謝。

我找到了將 Collection 傳遞到 function 的解決方法。

它沒有我想要的那么復雜。 但至少它有效。

基本上,我創建了一個新的存儲庫來使用實體管理器並創建我自己的 sql 語句。

@Repository
public class JourneyStatisticsCustomRepositoryImpl implements JourneyStatisticCustomRepository {

@PersistenceContext
private EntityManager entityManager;

@Override
public List getJourneyStatisticsByIds(Collection<UUID> uuids) {
    final Collection<String> formattedUUID = uuids.stream().map(uuid -> "cast('" + uuid + "' as uuid)").collect(Collectors.toSet());
    final String joinedUUIDs = Strings.join(formattedUUID.iterator(), ',');
    return entityManager.createNativeQuery("select cast(project_id as varchar(36)) as projectId, ..." +
            "... from journey_statistics(array[" + joinedUUIDs +"])", JourneyStatisticsView.class).getResultList();
}

這會將正確的集合發送到 function 並按預期返回數據。

希望這可以幫助其他有類似問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM