簡體   English   中英

Hibernate和准備好的聲明

[英]Hibernate and prepared statement

據我所知,谷歌的hibernate使用PreparedStatement進行查詢。

我需要執行一個由兩部分組成的查詢,第一部分可以用hibernate標准編寫,第二部分是dblink查詢,因此不能使用hibernate。

所以,我想從Criteria對象中提取PreparedStatement對象。

Criteria criteria = getSession().createCriteria(Entity.class);
//adding restrictions
PreparedStatement stmt;
//initializing stmt with criteria's PreparedStatement

我怎樣才能做到這一點? 它甚至可能嗎?

目前的Hibernate API無法實現這一點。 而且無論如何都很難為它添加支持。 例如,要執行getSession().createCriteria(Entity.class)而不受任何其他限制,Hibernate可能需要生成多個PreparedStatement(根據定義的獲取計划和Entity類策略來獲取Entity及其所有關聯) 。

此外,如果存在類似的事情,您將很難實現和維護此類解決方案事件。 您可能需要解析生成的語句,以便能夠“注入”您的查詢部分。 或者,當您修改實體或根據持久性上下文的當前狀態時,生成的語句可能會更改(會話中已經存在的內容不會再次獲取,因此查詢會有所不同等)。 將Hibernate升級到新版本時,您還需要小心,因為生成的查詢的確切結構可能會發生變化。

可能還有許多其他障礙使得目前難以實現這一目標,但我認為你的推理很好,希望Hibernate將來會暴露某種API,這將使我們對生成的產生更大的影響。 SQL。

創建一個在與表相同的模式中使用dblink查詢的視圖。

然后創建一個映射到您的視圖的實體。

然后,您可以創建DetachedCriteria以用作條件查詢中的子選擇。

暫無
暫無

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

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