Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/Examples/JPA/Multitenant"
< EclipseLink | Examples | JPA
(→Annotation examples) |
|||
Line 54: | Line 54: | ||
public int age; | public int age; | ||
} | } | ||
+ | </source> | ||
+ | |||
+ | ==== XML examples ==== | ||
+ | |||
+ | <source lang="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> | ||
+ | |||
</source> | </source> |
Revision as of 14:45, 6 June 2011
EclipseLink (as of 2.3) supports a shared (striped) multitenant table using a discriminator column(s).
EclipseLink supports multitenant entities using its @Multitenant
annotation or <multitenant>
xml element. The @Multitenant
annotation can be used on an @Entity
or @MappedSuperclass
.
Annotation examples
/** Single discriminator tenant column **/ @Entity @Table(name = "CUSTOMER") @Multitenant @TenantDescriminatorColumn(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; }
XML examples
<!-- 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>