2011-07-22 76 views
4

我想轉換我的應用程序以支持使用共享表的多租戶(即每個表獲得租戶ID)。顯然,我不能再使用@Column(unique = true),因爲它會強制所有租戶的獨特性,我不想這樣做。如何在多租戶環境中使用JPA @Column(unique = true)?

我使用EclipseLink的Glassfish 3.1.1。有沒有一種方法使@Column(unique = true)強制每個租戶(而不是每個表)的唯一性。或者我是否必須在業務邏輯中執行此操作?

回答

10

也可以指定對註釋的唯一性約束,例如,

@Table(name = "USERS", uniqueConstraints = @UniqueConstraint(columnNames = {"TENANT_ID", "username"})) 
1

的EclipseLink支持使用定製註釋(@Multitenant@TenantDiscriminatorColumn和)或在eclipselink-orm.xml文件中的等效屬性,因爲version 2.3.0多租戶。有關如何使用此支持功能的更多信息,請參閱EclipseLink wiki;在Youtube上可以找到associated screencast

因此,我認爲單獨使用@Unique註釋是不可能的。

+0

我看過EclipseLink中的多租戶支持,但看起來它不支持在運行時添加租戶。如果您查看截屏視頻,則每個租戶都會重複該應用程序代碼。因此,我將通過將租戶ID添加到每個列和查詢中來手動實施多租戶支持。你在eclipselink嘗試多租戶嗎? – Theo

+0

我沒有嘗試任何超出屏幕錄像的內容,但如果仔細查看示例,您可以在運行時設置租戶Id('eclipselink.tenant-id'),如果這是您在運行時添加租戶的含義。 –

+0

是的,事實證明你可以在運行時設置屬性。 – Theo

相關問題