2017-04-06 59 views
1

我們正在開發一個使用Spring boot + Spring數據與hibernate的多租戶Web應用程序。彈出數據JPA全局過濾器子句,它爲所有存儲庫方法繼承

多租戶是通過擁有一個組織表來實現的,該組織表幾乎作爲外鍵連接到幾乎每個表。這意味着每個數據庫調用(Spring Data存儲庫查詢方法)都必須使用組織標識進行檢查。

我需要一種方式,這個「where organization_id =?」檢查每個查詢方法自動注入。這樣開發人員就不必特別麻煩組織ID檢查。

這是從Spring Data JPA框架實現的嗎?這種方法的優點和缺點是什麼?

謝謝你的時間。

+0

的可能的複製[從多個數據庫與同一持久性單元讀?](http://stackoverflow.com/questions/8402835/reading-from-multiple-dbs-with-same-persistence-unit) – manish

+0

我不認爲這是重複的。我也想知道如何做這樣的事情,但沒有完全成熟的多元化。 –

+0

同意羅伯特。這不是多個DBS。這是相同的持久性單位Db。任何建議來實現這一目標? – J4Priyan

回答

0

如果你有一個基類,說BaseEntity你可以使用@ org.hibernate.annotations.Filter:

  1. 在BaseEntity:

    @FilterDef(NAME = 「organizationFilter」,參數= @ParamDef(名稱= 「ORGID」,類型= 「長」)) @Filter(名稱= 「organizationFilter」 條件= 「LANG_ID =:ORGID」)

  2. 上的會話的初始化(重寫JpaTransactionManager.createEntityManagerForTransaction ()?):

    session.enableFilter(「organizationFilter」)。setParameter(「orgId」,organization.getId());