ヘッダーをスキップ
Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス
12c (12.1.2)
E48005-01
  目次へ移動
目次

前
 
次
 

@TenantDiscriminatorColumn

@TenantDiscriminator注釈は、@Multitenant注釈およびSINGLE-TABLEマルチテナント・タイプとともに使用され、永続性コンテキストが単一表マルチテナンシでアクセスできる対象を制限します。

注釈要素

表2-67は、この注釈の要素を示しています。

表2-67 @TenantDiscriminatorColumnプロパティ

注釈要素 説明 デフォルト

java.lang.String columnDefinition

(オプション)識別子列のDDLを生成する際に使用されるSQLフラグメント。

指定の識別子タイプの列を作成するプロバイダ生成SQL。

java.lang.String contextProperty

(オプション)テナント識別子列に適用されるコンテキスト・プロパティの名前。

eclipselink.tenant-id

DiscriminatorType discriminatorType

(オプション)クラス識別子として使用するオブジェクト/列のタイプ。

javax.persistence.DiscriminatorType.STRING

int length

(オプション)文字列ベースの識別子タイプの列長。

文字列ベースの識別子タイプの列長。その他の識別子タイプでは無視されます。

java.lang.String name

(オプション)テナント識別子に使用される列の名前。

TENANT_ID

boolean primaryKey

テナント識別子列が表の主キーの一部であることを指定します。

false

java.lang.String table

(オプション)列を含む表の名前。

列を含む表の名前。存在しない場合、列はプライマリ表にあると想定されます。列がセカンダリ表にある場合は、この属性を指定する必要があります。


使用方法

単一表マルチテナンシを構成する場合は、次の両方を指定する必要があります。

識別子列の使用

次の特性が、識別子列に適用されます。

継承階層での単一表マルチテナンシの使用

継承方針は、継承タイプを指定することによって構成されます(@javax.persistence.Inheritanceを参照してください)。単一表マルチテナンシは、次のとおり、継承階層で使用できます。

表2-67に、テナント識別子列の多くの使用例を示します。

例2-110 @TenantDiscriminatorColumn注釈の使用

/** Single tenant discriminator column **/
 
@Entity
@Table(name = "CUSTOMER")
@Multitenant
@TenantDiscriminatorColumn(name = "TENANT", contextProperty = "multi-tenant.id")
public Customer() {
  ...
}
 
 
/** Multiple tenant discriminator columns using multiple tables **/
 
@Entity
@Table(name = "EMPLOYEE")
@SecondaryTable(name = "RESPONSIBILITIES")
@Multitenant(SINGLE_TABLE)
@TenantDiscriminatorColumns({
    @TenantDiscriminatorColumn(name = "TENANT_ID", contextProperty = "employee-tenant.id", length = 20)
    @TenantDiscriminatorColumn(name = "TENANT_CODE", contextProperty = "employee-tenant.code", discriminatorType = STRING, table = "RESPONSIBILITIES")
  }
)
public Employee() {
  ...
}
 
 
/** Tenant discriminator column mapped as part of the primary key on the database **/
 
@Entity
@Table(name = "ADDRESS")
@Multitenant
@TenantDiscriminatorColumn(name = "TENANT", contextProperty = "tenant.id", primaryKey = true)
public Address() {
  ...
}
 
 
/** Mapped tenant discriminator column **/
 
@Entity
@Table(name = "Player")
@Multitenant
@TenantDiscriminatorColumn(name = "AGE", contextProperty = "tenant.age")
public Player() {
  ...
 
  @Basic
  @Column(name="AGE", insertable="false", updatable="false")
  public int age;
}

例2-111に、eclipselink-orm.xmlファイルの<tenant-disciminator-column> XML要素を使用する同一マッピングを示します。

例2-111 <tenant-discriminator-column> XML注釈の使用

<!-- Single tenant discriminator column -->
 
<entity class="model.Customer">
  <multitenant>
    <tenant-discriminator-column name="TENANT context-property="multi-tenant.id""/>
  </multitenant>
  <table name="CUSTOMER"/>
  ...
</entity>
 
<!-- Multiple tenant discriminator columns using multiple tables -->
 
<entity class="model.Employee">
  <multitenant type="SINGLE_TABLE">
    <tenant-discriminator-column name="TENANT_ID" context-property="employee-tenant.id" length="20"/>
    <tenant-discriminator-column name="TENANT_CODE" context-property="employee-tenant.id" discriminator-type="STRING" table="RESPONSIBILITIES"/>
  </multitenant>
  <table name="EMPLOYEE"/>
  <secondary-table name="RESPONSIBILITIES"/>
  ...
</entity>
 
<!-- Tenant discriminator column mapped as part of the primary key on the database -->
 
<entity class="model.Address">
  <multitenant>
    <tenant-discriminator-column name="TENANT" context-property="multi-tenant.id" primary-key="true"/>
  </multitenant>
  <table name="ADDRESS"/>
  ...
</entity>
 
<!-- Mapped tenant discriminator column -->
 
<entity class="model.Player">
  <multi-tenant>
    <tenant-discriminator-column name="AGE" context-property="tenant.age"/>
  </multi-tenant>
  <table name="PLAYER"/>
  ...
  <attributes>
    <basic name="age" insertable="false" updatable="false">
      <column name="AGE"/>
    </basic>
    ...
  </attributes>
  ...
</entity>

関連項目