/******************************************************************************* * Copyright (c) 1998, 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: * Oracle - initial API and implementation from Oracle TopLink * 12/02/2010-2.2 Guy Pelletier * - 324471: Do not default to VariableOneToOneMapping for interfaces unless a managed class implementing it is found * 01/25/2011-2.3 Guy Pelletier * - 333488: Serializable attribute being defaulted to a variable one to one mapping and causing exception ******************************************************************************/ package org.eclipse.persistence.testing.models.jpa.relationships; import java.io.Serializable; import javax.persistence.*; import org.eclipse.persistence.annotations.VariableOneToOne; import org.eclipse.persistence.annotations.DiscriminatorClass; import org.eclipse.persistence.annotations.InstantiationCopyPolicy; import static javax.persistence.CascadeType.PERSIST; import static javax.persistence.DiscriminatorType.INTEGER; import static javax.persistence.FetchType.LAZY; import static javax.persistence.GenerationType.TABLE; @Entity @Table(name="CMP3_ITEM") @NamedQuery( name="findAllItemsByName", query="SELECT OBJECT(item) FROM Item item WHERE item.name = ?1" ) @InstantiationCopyPolicy // explicitly exercise the code that sets this (even though it is the default) public class Item implements java.io.Serializable { private Integer itemId; private int version; private String name; private String description; private Manufacturer manufacturer; private Distributor distributor; private Serializable tag; // No entity implements this interface therefore it should not be mapped // as a variable one to one. private Facade facade; public Item() {} @Id @GeneratedValue(strategy=TABLE, generator="ITEM_TABLE_GENERATOR") @TableGenerator( name="ITEM_TABLE_GENERATOR", table="CMP3_CUSTOMER_SEQ", pkColumnName="SEQ_NAME", valueColumnName="SEQ_COUNT", pkColumnValue="ITEM_SEQ" ) @Column(name="ID") public Integer getItemId() { return itemId; } public void setItemId(Integer id) { this.itemId = id; } @Version @Column(name="ITEM_VERSION") protected int getVersion() { return version; } protected void setVersion(int version) { this.version = version; } public String getDescription() { return description; } public void setDescription(String desc) { this.description = desc; } public String getName() { return name; } public void setName(String name) { this.name = name; } // The @VariableOneToOne definition purposely left off to test defaulting. public Manufacturer getManufacturer() { return manufacturer; } public void setManufacturer(Manufacturer manufacturer) { this.manufacturer = manufacturer; } @VariableOneToOne( targetInterface=Distributor.class, cascade=PERSIST, fetch=LAZY, discriminatorColumn=@DiscriminatorColumn(name="DISTRIBUTOR_TYPE", discriminatorType=INTEGER), discriminatorClasses={ @DiscriminatorClass(discriminator="1", value=MegaBrands.class), @DiscriminatorClass(discriminator="2", value=Namco.class) } ) @JoinColumn(name="DISTRIBUTOR_ID", referencedColumnName="distributorId") public Distributor getDistributor() { return distributor; } public void setDistributor(Distributor distributor) { this.distributor = distributor; } // No entity implements this interface therefore it should not be mapped // as a variable one to one. public Facade getFacade() { return facade; } public void setFacade(Facade facade) { this.facade = facade; } // This should default to a basic mapping (and not a variable 1-1) public Serializable getTag() { return tag; } public void setTag(Serializable tag) { this.tag = tag; } }