Interface TenantAware
- All Known Implementing Classes:
TenantAwareEntity
public interface TenantAware
租戶感知介面
標記需要多租戶數據隔離的 Entity。實作此介面的 Entity 應具備 tenantId 欄位,並搭配 Hibernate Filter 實現自動過濾。
實作建議:
方式 1:直接實作介面
@Entity
@Filter(name = "tenantFilter", condition = "tenant_id = :tenantId")
public class Customer implements TenantAware {
@Column(name = "tenant_id", nullable = false, updatable = false)
private String tenantId;
@Override
public String getTenantId() { return tenantId; }
@Override
public void setTenantId(String tenantId) { this.tenantId = tenantId; }
}
方式 2:建立應用層級的基類(推薦)
@MappedSuperclass
@FilterDef(name = "tenantFilter", parameters = @ParamDef(name = "tenantId", type = String.class))
public abstract class TenantAwareEntity implements TenantAware {
@Column(name = "tenant_id", nullable = false, updatable = false)
private String tenantId;
@Override
public String getTenantId() { return tenantId; }
@Override
public void setTenantId(String tenantId) { this.tenantId = tenantId; }
@PrePersist
protected void onPrePersist() {
if (tenantId == null) {
tenantId = TenantContext.getCurrentTenantId();
}
}
}
Hibernate Filter 設定:
- 在基類上使用
@FilterDef定義 filter - 在每個 Entity 上使用
@Filter啟用 filter - 使用
TenantFilterSupport在請求開始時啟用 filter
- See Also:
-
Method Summary
Modifier and TypeMethodDescription取得此 Entity 所屬的租戶 IDvoidsetTenantId(String tenantId) 設定此 Entity 所屬的租戶 ID
-
Method Details
-
getTenantId
-
setTenantId
設定此 Entity 所屬的租戶 ID
通常在
@PrePersist時自動設定,不應手動呼叫。- Parameters:
tenantId- 租戶 ID
-