1

我們有一個基於Web的多租戶企業應用,使用基於MySQL的Hibernate。我們使用Jasper Reports來報告客戶需要的任何報告,但現在我們還需要提供臨時報告,以便用戶可以運行自己的查詢。多租戶網絡應用的報告

他人怎麼做到這一點?

我想,我可以:

  1. 提供全面的出口在Excel或XML 格式,其中我滋潤實體,從而使任何@ManyToOne被替換爲實體的toString()。這將使數據對用戶實際上有意義,而不是大量外鍵ID。

  2. 讓他們對數據庫副本運行SQL。確保每個表都有一個 TENANT_ID,讓他們訪問 數據庫副本,但在後臺幕後追加每個查詢的ID到 。我甚至可以確保這個數據庫副本只有他們的數據。儘管如此,還是有一些挫敗了整個多租戶方式。

回答

1

這些用戶查詢有多複雜?任意SQL?或者你可以通過使用HQL或Criteria獲得(我真正的意思是你會讓用戶在用戶界面中定義某種QBE,但你會成爲構建實際查詢的人)?在後一種情況下,過濾器也可能有所幫助。

我不會打擾(1)除非查詢結果總是普通列表。您可以使用XML表示層次結構/關係,但是我懷疑用戶會喜歡這一點,因爲他們必須處理它。 toString()方法幾乎可以保證適得其反,因爲不同的用戶一定會對同一對象的不同渲染感興趣(例如,如果返回鏈接到Bs的As的列表,則user1會希望得到與B.toString不同的結果)然後是user2)。

(2)如果您真的需要任意的SQL查詢,它應該可以工作。根據您的數據庫的複雜程度和您擁有的用戶數量,您可以通過創建視圖(每個用戶)而不是實際的數據庫副本。