簡體   English   中英

是否可以添加參數以休眠生成的查詢?

[英]Is it possible to add a parameter to hibernate generated query?

假設我在數據庫中有一個表“ student”,它很大。 學生中有幾列,包括“ id”和“ class-id”。

在hbm文件中,我目前具有以下防御者代碼:

 <id name="id" column="ID" type="long"> <generator class="native"> <param name="sequence">student_ID_SEQ</param> <param name="max_lo">999</param> </generator> </id> <property name="class-id" column="class-id" not-null="true" insert="true" update="true"/> 

在這種情況下,如果我更新學生持久性課程,則查詢將類似於:

update .... set .... where ID={id}

但是出於分區的原因,我還想在查詢中包括class-id,例如:

update .... set .... where ID={id} and class-id={class-id}

我嘗試了Composite-ID,但是發現Composite-ID中不允許使用生成器,因為Composite-ID通常是基於分配的,而不是基於生成器的。

因此,我只是想知道,是否可以添加參數以休眠生成的查詢?

不,不幸的是,Hibernate中沒有類似的東西。

實際上,由於Hibernate讀取關聯實體的方式,很難將數據庫分區與Hibernate一起使用。 假設我們有一個實體A,它具有到實體B的多對一映射。當Hibernate讀取實體A時,它將自動讀取實體B。這取決於獲取計划和策略,如何以及何時從數據庫中准確加載B,但是無論如何,它是一個查詢,該查詢將不包含where子句中的分區列(如果未使用復合主鍵)。

我希望將來的Hibernate版本將考慮到這一點。

但是,您可以看一下Hibernate 過濾器 ,也許它們可以滿足您的分區需求。 請記住,雖然在按ID讀取實體時未應用過濾器,但再次意味着,多對一關聯中的讀取實體將不包含分區條件。 如果數據庫支持全局索引,則可以通過使用全局索引來解決(但是它們有其​​自身的陷阱)。

同樣,根據您使用分區的目的,您可以創建包含分區條件的數據庫視圖,然后將Hibernate實體映射到這些視圖。

或者,正如您提到的,我還要說的是,在其他情況下,這是最直接的方法,您可以使用復合主鍵並使用自己的id生成器實現(實際上,如果有一個,則不難實現)這是您不考慮復合ID的唯一原因。

暫無
暫無

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

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