jakarta.persistence.MappedSuperclass Maven / Gradle / Ivy
/*
* Copyright (c) 2008, 2023 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:
// Linda DeMichiel - 2.1
// Linda DeMichiel - 2.0
package jakarta.persistence;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Declares a class which is not itself an entity, but whose
* mappings are inherited by the entities which extend it.
*
* A mapped superclass is not a persistent type, and is
* not mapped to a database table.
*
*
The persistent fields and properties of a mapped
* superclass are declared and mapped using the same mapping
* annotations used to map {@linkplain Entity entity classes}.
* However, these mappings are interpreted in the context of
* each entity class which inherits the mapped superclass,
* since the mapped superclass itself has no table to map.
*
*
Mapping information may be overridden in each such
* subclass using the {@link AttributeOverride} and
* {@link AssociationOverride} annotations or corresponding
* XML elements.
*
*
Example: Concrete class as a mapped superclass
* {@snippet :
* @MappedSuperclass
* public class Employee {
*
* @Id
* protected Integer empId;
* @Version
* protected Integer version;
* @ManyToOne
* @JoinColumn(name = "ADDR")
* protected Address address;
*
* public Integer getEmpId() { ... }
* public void setEmpId(Integer id) { ... }
* public Address getAddress() { ... }
* public void setAddress(Address addr) { ... }
* }
*
* // Default table is FTEMPLOYEE table
* @Entity
* public class FTEmployee extends Employee {
*
* // Inherited empId field mapped to FTEMPLOYEE.EMPID
* // Inherited version field mapped to FTEMPLOYEE.VERSION
* // Inherited address field mapped to FTEMPLOYEE.ADDR fk
*
* // Defaults to FTEMPLOYEE.SALARY
* protected Integer salary;
*
* public FTEmployee() {}
*
* public Integer getSalary() { ... }
* public void setSalary(Integer salary) { ... }
* }
*
* @Entity @Table(name = "PT_EMP")
* @AssociationOverride(
* name = "address",
* joinColumns = @JoinColumn(name = "ADDR_ID"))
* public class PartTimeEmployee extends Employee {
*
* // Inherited empId field mapped to PT_EMP.EMPID
* // Inherited version field mapped to PT_EMP.VERSION
* // address field mapping overridden to PT_EMP.ADDR_ID fk
* @Column(name = "WAGE")
* protected Float hourlyWage;
*
* public PartTimeEmployee() {}
*
* public Float getHourlyWage() { ... }
* public void setHourlyWage(Float wage) { ... }
* }
* }
*
* @see AttributeOverride
* @see AssociationOverride
* @since 1.0
*/
@Documented
@Target({TYPE})
@Retention(RUNTIME)
public @interface MappedSuperclass {
}