| /* |
| * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // 03/24/2011-2.3 Guy Pelletier |
| // - 337323: Multi-tenant with shared schema support (part 1) |
| // 11/10/2011-2.4 Guy Pelletier |
| // - 357474: Address primaryKey option from tenant discriminator column |
| package org.eclipse.persistence.internal.jpa.metadata.accessors.mappings; |
| |
| import org.eclipse.persistence.internal.helper.DatabaseField; |
| import org.eclipse.persistence.internal.jpa.metadata.accessors.classes.ClassAccessor; |
| import org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataAccessibleObject; |
| import org.eclipse.persistence.mappings.MultitenantPrimaryKeyMapping; |
| |
| /** |
| * A multitenant id accessor. This is a special type of mapping accessor in |
| * that it is not mapped in the object and this mapping accessor is not |
| * mapped through annotations and/or XML. They are created on the fly when |
| * tenant discrimator columns are found that specify primaryKey=true. |
| * |
| * Key notes: |
| * - methods should be preserved in alphabetical order. |
| * |
| * @author Guy Pelletier |
| * @since EclipseLink 2.4 |
| */ |
| public class MultitenantIdAccessor extends IdAccessor { |
| protected DatabaseField m_tenantDiscriminatorField; |
| protected String m_contextProperty; |
| |
| /** |
| * INTERNAL: |
| */ |
| public MultitenantIdAccessor(String contextProperty, DatabaseField tenantDiscriminatorField, MetadataAccessibleObject accessibleObject, ClassAccessor classAccessor) { |
| super(null, accessibleObject, classAccessor); |
| |
| m_contextProperty = contextProperty; |
| m_tenantDiscriminatorField = tenantDiscriminatorField; |
| } |
| |
| /** |
| * INTERNAL: |
| */ |
| @Override |
| public boolean isMultitenantId() { |
| return true; |
| } |
| |
| /** |
| * INTERNAL: |
| * Process a multitenant id accessor. |
| */ |
| @Override |
| public void process() { |
| MultitenantPrimaryKeyMapping mapping = new MultitenantPrimaryKeyMapping(); |
| setMapping(mapping); |
| |
| // Set the tenant discriminator field. |
| mapping.setField(m_tenantDiscriminatorField); |
| |
| // Set the context property. |
| mapping.setContextProperty(m_contextProperty); |
| |
| // Add it to the list of primary key fields. |
| getDescriptor().addPrimaryKeyField(m_tenantDiscriminatorField, this); |
| } |
| } |