/******************************************************************************* * Copyright (c) 2011, 2015 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 v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * 03/24/2011-2.3 Guy Pelletier * - 337323: Multi-tenant with shared schema support (part 1) * 04/21/2011-2.3 Guy Pelletier * - 337323: Multi-tenant with shared schema support (part 5) * 06/1/2011-2.3 Guy Pelletier * - 337323: Multi-tenant with shared schema support (part 9) ******************************************************************************/ package org.eclipse.persistence.testing.models.jpa.advanced.multitenant; import java.util.Collection; import java.util.Vector; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToOne; import javax.persistence.ManyToMany; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.Version; import org.eclipse.persistence.annotations.Multitenant; import org.eclipse.persistence.annotations.TenantDiscriminatorColumn; import static javax.persistence.CascadeType.ALL; import static org.eclipse.persistence.annotations.MultitenantType.SINGLE_TABLE; @Entity @Table(name="JPA_CONTRACT") @Multitenant(SINGLE_TABLE) @NamedQueries({ @NamedQuery( name="FindAllContracts", query="SELECT c FROM Contract c"), @NamedQuery( name="UpdateAllContractDescriptions", query="UPDATE Contract c SET c.description = 'voided'"), @NamedQuery( name="DeleteAllContractsWithDescription", query="DELETE FROM Contract c WHERE c.description LIKE :description"), @NamedQuery( name="DeleteAllContracts", query="DELETE FROM Contract c"), @NamedQuery( name="DeleteContractByPrimaryKey", query="DELETE FROM Contract c WHERE c.id = :id") }) // Will default the tenant discriminator column to TENANT_ID, which is mapped below. public class Contract { private int id; private Integer version; private String description; private String tenantId; private Collection<Soldier> soldiers; public Contract() { this.soldiers = new Vector<Soldier>(); } public void addSoldier(Soldier soldier) { soldiers.add(soldier); soldier.addContract(this); } @Column(name="DESCRIP") public String getDescription() { return description; } @Id @Column(name="ID") @GeneratedValue public int getId() { return id; } @ManyToMany(cascade=ALL) @JoinTable( name="JPA_CONTRACT_SOLDIER", joinColumns=@JoinColumn(name="CONTRACT_ID"), inverseJoinColumns=@JoinColumn(name="SOLDIER_ID") ) public Collection<Soldier> getSoldiers() { return soldiers; } @Column(name="TENANT_ID", insertable=false, updatable=false) public String getTenantId() { return tenantId; } @Version public Integer getVersion() { return version; } public void setDescription(String description) { this.description = description; } public void setId(int id) { this.id = id; } public void setSoldiers(Collection<Soldier> soldiers) { this.soldiers = soldiers; } public void setTenantId(String tenantId) { this.tenantId = tenantId; } public void setVersion(Integer version) { this.version = version; } }