/******************************************************************************* * 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 * 06/20/2008-1.0 Guy Pelletier * - 232975: Failure when attribute type is generic * 07/15/2010-2.2 Guy Pelletier * -311395 : Multiple lifecycle callback methods for the same lifecycle event * 08/11/2010-2.2 Guy Pelletier * - 312123: JPA: Validation error during Id processing on parameterized generic OneToOne Entity relationship from MappedSuperclass ******************************************************************************/ package org.eclipse.persistence.testing.models.jpa.inherited; import java.io.Serializable; import java.util.Date; import java.util.ArrayList; import javax.persistence.PostPersist; import javax.persistence.Table; import javax.persistence.Entity; import javax.persistence.Column; import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.OneToOne; import javax.persistence.PrePersist; import javax.persistence.PrimaryKeyJoinColumn; import static javax.persistence.CascadeType.ALL; import static javax.persistence.TemporalType.DATE; @Entity @Table(name="CMP3_ALPINE") @TableGenerator( name="USED_TO_TEST_A_LOG_MESSAGE", //table="leave this commented out", pkColumnName="SEQ_NAME", valueColumnName="SEQ_COUNT", pkColumnValue="BEVERAGE_SEQ") public class Alpine extends Beer<Integer, Double, Alpine> implements Cloneable, Serializable { public enum Classification { STRONG, BITTER, SWEET, NONE } private Date bestBeforeDate; private Classification classification; private SerialNumber serialNumber; private ArrayList inspectionDates; public static int ALPINE_PRE_PERSIST_COUNT = 0; public static int ALPINE_POST_PERSIST_COUNT = 0; protected Alpine(){}; public Alpine(SerialNumber serialNumber) { inspectionDates = new ArrayList(); setId(serialNumber.getNumber()); serialNumber.setAlpine(this); setSerialNumber(serialNumber); } public Alpine clone() throws CloneNotSupportedException { return (Alpine)super.clone(); } public void addInspectionDate(Date date) { getInspectionDates().add(date); } @PrePersist public void celebrate() { if (classification != null && classification == Classification.NONE) { classification = Classification.STRONG; } ALPINE_PRE_PERSIST_COUNT++; } @PostPersist public void celebrateAgain() { ALPINE_POST_PERSIST_COUNT++; } @Column(name="BB_DATE") @Temporal(DATE) public Date getBestBeforeDate() { return bestBeforeDate; } public Classification getClassification() { return classification; } @Column(name="I_DATES") public ArrayList getInspectionDates() { return inspectionDates; } @OneToOne(cascade=ALL) @PrimaryKeyJoinColumn public SerialNumber getSerialNumber() { return serialNumber; } public void setBestBeforeDate(Date bestBeforeDate) { this.bestBeforeDate = bestBeforeDate; } public void setClassification(Classification classification) { this.classification = classification; } public void setInspectionDates(ArrayList inspectionDates) { this.inspectionDates = inspectionDates; } protected void setSerialNumber(SerialNumber serialNumber) { this.serialNumber = serialNumber; } public boolean equals(Object anotherAlpine) { if (anotherAlpine.getClass() != Alpine.class) { return false; } return (getId().equals(((Alpine)anotherAlpine).getId())); } }