我已經使用EclipseLink並支持MySQL(和其他6個DBMS)實現了這樣的事情。在這種情況下,應用程序在企業內部使用,但您可以讓多個項目隔離不同的部門(租戶),並且可以定義可以查看所有項目數據的用戶。
關鍵是要在您的ER圖中引入租戶實體作爲頂級實體,而其他每個實體都屬於租戶。
@Entity
public class Tenant {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany(mappedBy = "tenant", cascade = CascadeType.ALL)
private Collection<User> users;
@OneToMany(mappedBy = "tenant", cascade = CascadeType.ALL)
private Collection<TenantConfiguration> configurations;
}
你將不得不處理的一個挑戰是安全性。在每個請求中,您必須驗證用戶是否有權訪問請求的實體(不要信任前端)。這意味着您的OAuth2身份驗證(在登錄期間創建)需要包含對實體的引用,以允許您確定用戶租期和權限。出於性能考慮,您通常在JPA查詢中包含Tenancy(TENANCY_ID),以避免加載大量數據並將其過濾到內存中。
好運
請張貼一些代碼行(Java類,屬性文件,...) – emoleumassi
難道僅僅是多租戶或者是它也應用程序,或者你將有5個實例數據庫的應用程序(可能在同一個web容器上)? –
他們是同一組的不同學校,所以我決定提供相同的應用程序,但保留數據在單獨的數據庫,但高層管理人員有權訪問所有數據庫。 –