Interface TenantAware

All Known Implementing Classes:
TenantAwareEntity

public interface TenantAware

租戶感知介面

標記需要多租戶數據隔離的 Entity。實作此介面的 Entity 應具備帶 TenantId 的 tenantId 欄位——租戶過濾由 Hibernate 原生 discriminator 多租戶於 Session 建構時自動套用,不需任何手動 enable (見 TenantContextIdentifierResolver、ADR-016)。

實作建議

方式 1:繼承 TenantAwareEntity(首選)——@TenantId 欄位宣告與 root session 寫入守衛皆已備妥

@Entity
public class Customer extends TenantAwareEntity {
    // ...
}

方式 2:無法繼承時(單一繼承已被其他基類占用),直接實作本介面並自行宣告 @TenantId 欄位。宣告方式須對齊 TenantAwareEntitylength = 36, nullable = false, updatable = false不得加 @NotBlank,理由見該類 javadoc)

@Entity
public class Customer extends SomeOtherBase implements TenantAware {

    @TenantId
    @Column(name = "tenant_id", length = 36, nullable = false, updatable = false)
    @Size(max = 36)
    private String tenantId;

    @Override
    public String getTenantId() { return tenantId; }

    @Override
    public void setTenantId(String tenantId) { this.tenantId = tenantId; }
}
See Also:
  • Method Summary

    Modifier and Type
    Method
    Description
    取得此 Entity 所屬的租戶 ID
    void
    setTenantId(String tenantId)
    設定此 Entity 所屬的租戶 ID
  • Method Details

    • getTenantId

      String getTenantId()
      取得此 Entity 所屬的租戶 ID
      Returns:
      租戶 ID
    • setTenantId

      void setTenantId(String tenantId)

      設定此 Entity 所屬的租戶 ID

      一般情況由 Hibernate @TenantId 於寫入時自動注入,不需手動呼叫;root session 要替特定租戶建立資料時才顯式設定(見 TenantAwareEntity 的守衛說明)。

      Parameters:
      tenantId - 租戶 ID