Как использовать JPA @Column (unique = true) в мультитенантной среде? - PullRequest
4 голосов
/ 22 июля 2011

Я хочу преобразовать свое приложение для поддержки мультитенантности с использованием общих таблиц (то есть каждая таблица получает идентификатор арендатора). Очевидно, что я больше не смогу использовать @Column(unique = true), потому что это обеспечило бы уникальность для всех арендаторов, чего я не хочу.

Я использую Glassfish 3.1.1 с EclipseLink. Есть ли способ заставить @Column(unique = true) форсировать уникальность на одного арендатора (а не на таблицу). Или я должен применять это в бизнес-логике?

Ответы [ 2 ]

10 голосов
/ 07 августа 2011

Также можно указать ограничение уникальности для аннотации @Table, например,

@Table(name = "USERS", uniqueConstraints = @UniqueConstraint(columnNames = {"TENANT_ID", "username"}))
1 голос
/ 22 июля 2011

EclipseLink поддерживает мультитенантность с использованием пользовательских аннотаций (@Multitenant, @TenantDiscriminatorColumn и @TenantDiscriminatorColumns) или эквивалентных атрибутов в файле eclipselink-orm.xml, начиная с версии 2.3.0 . Дополнительная информация о том, как использовать эту поддерживаемую функцию, доступна в EclipseLink wiki ; связанный скринкаст можно найти на Youtube.

Поэтому я бы предположил, что это невозможно сделать только с помощью аннотации @Unique.

...