在一個web應用程序中,我使用Hibernate的@SQLDelete
註釋來「軟刪除」實體(即將狀態列設置爲表示其「已刪除」狀態的值,而不是實際從表中刪除它們)。是否可以使`@ SQLDelete`考慮`hibernate.default_schema`參數?
實體代碼如下所示:
@Entity
@SQLDelete(sql="update pizza set status = 2 where id = ?")
public class Pizza { ... }
現在,我的問題是,Web應用程序不使用模式的所有者,以該表屬於連接到數據庫。例如。模式(在Oracle中)被稱爲pizza
,Web應用程序用於連接的數據庫用戶是pizza_webapp
。這是出於安全原因。 pizza_webapp
用戶只有選擇/更新/刪除權限,它不能修改數據庫本身的結構。我在這裏沒有任何選擇,這是我無法改變的政策。
我指定的表實際上是與hibernate-default_schema
參數處於休眠配置模式的名稱:
<property name="hibernate.default_schema">pizza</property>
這對於通過映射實體去一切正常,Hibernate知道如何添加模式名稱在它生成的SQL中的表名之前。但不適用於原始SQL,並且@SQLDelete
包含原始SQL。這是「按原樣」執行的,結果爲"table or view not found error"
。
到目前爲止,我們通過向pizza_webapp
模式添加同義詞來解決此問題,指向pizza
模式。它可以工作,但在添加實體時跨多個數據庫進行維護並不有趣。
那麼,是否有可能使@SQLDelete
參考hibernate.default_schema
參數?
(注:很顯然,我不想硬編碼在SQL架構名稱要麼...)