Sei sulla pagina 1di 10

CHAPTER 12

Entity Inheritance

,Q RUGHU WR EH FRPSOHWH DQ REMHFW WR UHODWLRQDO PDSSLQJ HQJLQH PXVW VXSSRUW LQKHUL


WDQFH KLHUDUFKLHV 7KH -DYD 3HUVLVWHQFH VSHFLILFDWLRQ VXSSRUWV HQWLW\ LQKHULWDQFH SRO\
PRUSKLF UHODWLRQVKLSV DVVRFLDWLRQV DQG SRO\PRUSKLF TXHULHV 7KHVH IHDWXUHV ZHUH
FRPSOHWHO\ PLVVLQJ LQ WKH ROGHU (-% &03 VSHFLILFDWLRQ
,Q WKLV FKDSWHU ZH¦OO PRGLI\ WKH Employee HQWLW\ WKDW ZH GHILQHG LQ HDUOLHU FKDSWHUV WR
PDNH LW ILW LQWR DQ LQKHULWDQFH KLHUDUFK\ :H¦OO KDYH LW H[WHQG D EDVH FODVV FDOOHG
Person DQG UHGHILQH WKH Employee FODVV WR H[WHQG D Customer FODVV )LJXUH VKRZV
WKLV FODVV KLHUDUFK\

)LJXUH &XVWRPHU FODVV KLHUDUFK\

7KH -DYD 3HUVLVWHQFH VSHFLILFDWLRQ SURYLGHV WKUHH GLIIHUHQW ZD\V WR PDS DQ LQKHULWDQFH
KLHUDUFK\ WR D UHODWLRQDO GDWDEDVH
$ VLQJOH WDEOH SHU FODVV KLHUDUFK\
2QH WDEOH ZLOO KDYH DOO SURSHUWLHV RI HYHU\ FODVV LQ WKH KLHUDUFK\
$ WDEOH SHU FRQFUHWH FODVV
(DFK FODVV ZLOO KDYH D WDEOH GHGLFDWHG WR LW ZLWK DOO RI LWV SURSHUWLHV DQG WKH SURS
HUWLHV RI LWV VXSHUFODVV PDSSHG WR WKLV WDEOH

195
$ WDEOH SHU VXEFODVV
(DFK FODVV ZLOO KDYH LWV RZQ WDEOH (DFK WDEOH ZLOO KDYH RQO\ WKH SURSHUWLHV WKDW DUH
GHILQHG LQ WKDW SDUWLFXODU FODVV 7KHVH WDEOHV ZLOO QRW KDYH SURSHUWLHV RI DQ\ VXSHU
FODVV RU VXEFODVV
,Q WKLV FKDSWHU ZH XVH WKHVH WKUHH VWUDWHJLHV WR PDS WKH Employee FODVV KLHUDUFK\ GHILQHG
LQ )LJXUH

Single Table per Class Hierarchy


,Q WKH VLQJOH WDEOH SHU FODVV KLHUDUFK\ PDSSLQJ VWUDWHJ\ RQH GDWDEDVH WDEOH UHSUHVHQWV
HYHU\ FODVV RI D JLYHQ KLHUDUFK\ ,Q RXU H[DPSOH WKH Person Customer DQG Employee
HQWLWLHV DUH UHSUHVHQWHG LQ WKH VDPH WDEOH DV VKRZQ LQ WKH IROORZLQJ FRGH
CREATE TABLE "PUBLIC"."SINGLECLASS_PERSON"
(
DISCRIMINATOR varchar NOT NULL,
ID bigint PRIMARY KEY NOT NULL,
FIRSTNAME varchar,
LASTNAME varchar,
CITY varchar,
STATE varchar,
STREET varchar,
ZIP varchar,
EMPLOYEEID integer
)
;

$V \RX FDQ VHH DOO WKH SURSHUWLHV IRU WKH Customer FODVV KLHUDUFK\ DUH KHOG LQ RQH WDEOH
SINGLECLASS_PERSON 7KH VLQJOH WDEOH SHU FODVV KLHUDUFK\ PDSSLQJ DOVR UHTXLUHV DQ DG
GLWLRQDO GLVFULPLQDWRU FROXPQ 7KLV FROXPQ LGHQWLILHV WKH W\SH RI HQWLW\ EHLQJ VWRUHG LQ
D SDUWLFXODU URZ RI SINGLECLASS_PERSON /HW¦V ORRN DW KRZ WKH FODVVHV ZLOO XVH DQQRWD
WLRQV WR PDS WKLV LQKHULWDQFH VWUDWHJ\
@Entity(name = "SINGLECLASS_PERSON")
@DiscriminatorColumn(name = "DISCRIMINATOR", discriminatorType =
DiscriminatorType.STRING)
@DiscriminatorValue("PERSON")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Person
{
@Id
@GeneratedValue
private Long id;

private String firstName;


private String lastName;

...
}

196 | Chapter 12:—Entity Inheritance


7KLV LV RXU EDVH FODVV IRU ERWK CustomerV DQG EmployeeV ,W GHILQHV WKH GLVFULPLQDWRU
FROXPQ ZH¦YH MXVW VHHQ DV "DISCRIMINATOR" ZKHUH Person URZV ZLOO KDYH D YDOXH RI
"PERSON"
6LQFH RQH WDEOH LV UHSUHVHQWLQJ WKH HQWLUH FODVV KLHUDUFK\ WKH SHUVLVWHQFH SURYLGHU QHHGV
VRPH ZD\ WR LGHQWLI\ ZKLFK FODVV WKH URZ LQ WKH GDWDEDVH PDSV WR ,W GHWHUPLQHV
WKLV E\ UHDGLQJ WKH YDOXH IURP WKH GLVFULPLQDWRU FROXPQ 7KH
@javax.persistence.DiscriminatorColumn DQQRWDWLRQ LGHQWLILHV ZKLFK FROXPQ LQ RXU
WDEOH ZLOO VWRUH WKH GLVFULPLQDWRU¦V YDOXH 7KH name() DWWULEXWH LGHQWLILHV WKH QDPH RI
WKH FROXPQ DQG WKH discriminatorType() DWWULEXWH VSHFLILHV ZKDW W\SH WKH GLVFULPLQD
WRU FROXPQ ZLOO EH ,W FDQ EH D STRING CHAR RU INTEGER )RU RXU Employee FODVV KLHUDUFK\
PDSSLQJ \RX GR QRW KDYH WR VSHFLI\ WKH discriminatorType() DV LW GHIDXOWV WR EHLQJ D
STRING ,I \RX¦UH 2. ZLWK WKH GHIDXOW FROXPQ QDPH \RX FDQ UHPRYH WKH @Discrimina
torColumn HQWLUHO\
package javax.persistence;

@Target(TYPE) @Retention(RUNTIME)
public @interface DiscriminatorColumn
{
String name( ) default "DTYPE";
DiscriminatorType discriminatorType( ) default STRING;
String columnDefinition( ) default "";
int length( ) default 10;
}

7KH @javax.persistence.DiscriminatorValue DQQRWDWLRQ GHILQHV ZKDW YDOXH WKH GLV


FULPLQDWRU FROXPQ ZLOO WDNH IRU URZV WKDW VWRUH DQ LQVWDQFH RI D Person FODVV <RX FDQ
OHDYH WKLV DWWULEXWH XQGHILQHG LI \RX ZDQW WR ,Q WKDW FDVH WKH SHUVLVWHQFH PDQDJHU
ZRXOG JHQHUDWH D YDOXH IRU \RX DXWRPDWLFDOO\ 7KLV YDOXH ZLOO EH YHQGRU VSHFLILF LI WKH
DiscriminatorType LV CHAR RU INTEGER 7KH HQWLW\ QDPH LV XVHG E\ GHIDXOW ZKHQ D W\SH
RI STRING LV VSHFLILHG ,W LV JRRG SUDFWLFH WR VSHFLI\ WKH YDOXH IRU CHAR DQG
INTEGER YDOXHV
package javax.persistence;

@Target(TYPE) @Retention(RUNTIME)
public @interface DiscriminatorValue
{
String value( )
}

7KH @javax.persistence.Inheritance DQQRWDWLRQ LV XVHG WR GHILQH WKH SHUVLVWHQFH VWUDW


HJ\ IRU WKH LQKHULWDQFH UHODWLRQVKLS
package javax.persistence;

@Target(TYPE) @Retention(RUNTIME)
public @interface Inheritance
{
InheritanceType strategy( ) default SINGLE_TABLE;
}

Single Table per Class Hierarchy | 197


public enum InheritanceType
{
SINGLE_TABLE, JOINED, TABLE_PER_CLASS
}

7KH strategy() DWWULEXWH GHILQHV WKH LQKHULWDQFH PDSSLQJ WKDW ZH¦UH XVLQJ 6LQFH ZH¦UH
XVLQJ WKH VLQJOH WDEOH SHU FODVV KLHUDUFK\ WKH SINGLE_TABLE HQXP LV DSSOLHG
:H FDQ QRZ H[WHQG WKLV EDVH LQWR D PRUH VSHFLDOL]HG Customer
@Entity(name = "SINGLECLASS_CUSTOMER")
@DiscriminatorValue("CUSTOMER")
public class Customer extends Person
{
private String street;
private String city;
private String state;
private String zip;
...
}

Customer URZV LQ WKH WDEOH ZLOO XVH D YDOXH RI "CUSTOMER" LQ WKH GLVFULPLQDWRU FROXPQ
)LQDOO\ ZH KDYH Employee
@Entity (name="SINGLECLASS_EMPLOYEE")
@DiscriminatorValue("EMPLOYEE")
public class Employee extends Customer
{
private Integer employeeId;
...
}

Advantages
7KH SINGLE_TABLE PDSSLQJ VWUDWHJ\ LV WKH VLPSOHVW WR LPSOHPHQW DQG SHUIRUPV EHWWHU
WKDQ DOO WKH LQKHULWDQFH VWUDWHJLHV 7KHUH LV RQO\ RQH WDEOH WR DGPLQLVWHU DQG GHDO ZLWK
7KH SHUVLVWHQFH HQJLQH GRHV QRW KDYH WR GR DQ\ FRPSOH[ MRLQV XQLRQV RU VXEVHOHFWV
ZKHQ ORDGLQJ WKH HQWLW\ RU ZKHQ WUDYHUVLQJ D SRO\PRUSKLF UHODWLRQVKLS EHFDXVH DOO GDWD
LV VWRUHG LQ RQH WDEOH

Disadvantages
2QH KXJH GLVDGYDQWDJH RI WKLV DSSURDFK LV WKDW DOO FROXPQV RI VXEFODVV SURSHUWLHV PXVW
EH QXOODEOH 6R LI \RX QHHG RU ZDQW WR KDYH DQ\ NOT NULL FRQVWUDLQWV GHILQHG RQ WKHVH
FROXPQV \RX FDQQRW GR VR $OVR EHFDXVH VXEFODVV SURSHUW\ FROXPQV PD\ EH XQXVHG
WKH SINGLE_TABLE VWUDWHJ\ LV QRW QRUPDOL]HG

198 | Chapter 12:—Entity Inheritance


Table per Concrete Class
,Q WKH WDEOH SHU FRQFUHWH FODVV VWUDWHJ\ D GDWDEDVH WDEOH LV GHILQHG IRU HDFK FRQFUHWH
FODVV LQ WKH KLHUDUFK\ (DFK WDEOH KDV FROXPQV UHSUHVHQWLQJ LWV SURSHUWLHV DQG DOO SURS
HUWLHV RI DQ\ VXSHUFODVVHV
CREATE TABLE "PUBLIC"."TABLEPERCLASS_PERSON"
(
ID bigint PRIMARY KEY NOT NULL,
FIRSTNAME varchar,
LASTNAME varchar
)
;

CREATE TABLE "PUBLIC"."TABLEPERCLASS_CUSTOMER"


(
ID bigint PRIMARY KEY NOT NULL,
FIRSTNAME varchar,
LASTNAME varchar,
CITY varchar,
STATE varchar,
STREET varchar,
ZIP varchar
)
;

CREATE TABLE "PUBLIC"."TABLEPERCLASS_EMPLOYEE"


(
ID bigint PRIMARY KEY NOT NULL,
FIRSTNAME varchar,
LASTNAME varchar,
CITY varchar,
STATE varchar,
STREET varchar,
ZIP varchar,
EMPLOYEEID integer
)
;

2QH PDMRU GLIIHUHQFH EHWZHHQ WKLV VWUDWHJ\ DQG WKH SINGLE_TABLE VWUDWHJ\ LV WKDW QR
GLVFULPLQDWRU FROXPQ LV QHHGHG LQ WKH GDWDEDVH VFKHPD $OVR QRWLFH WKDW HDFK WDEOH
FRQWDLQV HYHU\ SHUVLVWHQW SURSHUW\ LQ WKH KLHUDUFK\ /HW¦V QRZ ORRN DW KRZ ZH PDS WKLV
VWUDWHJ\ ZLWK DQQRWDWLRQV
@Entity(name = "TABLEPERCLASS_PERSON")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Person
{
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
// Cannot accept default generation strategy for table-per-class
private Long id;

private String firstName;

Table per Concrete Class | 199


private String lastName;
...
}

@Entity(name = "TABLEPERCLASS_CUSTOMER")
public class Customer extends Person
{
private String street;
private String city;
private String state;
private String zip;
...
}

@Entity(name = "TABLEPERCLASS_EMPLOYEE")
public class Employee extends Customer
{
private Integer employeeId;
...
}

1RWLFH WKDW WKH RQO\ LQKHULWDQFH PHWDGDWD UHTXLUHG LV WKH InheritanceType DQG WKLV LV
QHHGHG RQ RQO\ WKH EDVH Person FODVV

Advantages
7KH DGYDQWDJH WR WKLV DSSURDFK RYHU WKH SINGLE_TABLE VWUDWHJ\ LV WKDW \RX FDQ GHILQH
FRQVWUDLQWV RQ VXEFODVV SURSHUWLHV $QRWKHU SOXV LV WKDW LW PLJKW EH HDVLHU WR PDS D
SUHH[LVWLQJ OHJDF\ VFKHPD XVLQJ WKLV VWUDWHJ\

Disadvantages
7KLV VWUDWHJ\ LV QRW QRUPDOL]HG DV LW KDV UHGXQGDQW FROXPQV LQ HDFK RI LWV WDEOHV IRU
HDFK RI WKH EDVH FODVV¦V SURSHUWLHV $OVR WR VXSSRUW WKLV W\SH RI PDSSLQJ WKH SHUVLVWHQFH
PDQDJHU KDV WR GR VRPH IXQN\ WKLQJV 2QH ZD\ LW FRXOG EH LPSOHPHQWHG LV IRU WKH
FRQWDLQHU WR XVH PXOWLSOH TXHULHV ZKHQ ORDGLQJ DQ HQWLW\ RU SRO\PRUSKLF UHODWLRQVKLS
7KLV LV D KXJH SHUIRUPDQFH KLW EHFDXVH WKH FRQWDLQHU KDV WR GR PXOWLSOH URXQG WULSV WR
WKH GDWDEDVH $QRWKHU ZD\ D FRQWDLQHU FRXOG LPSOHPHQW WKLV VWUDWHJ\ LV WR XVH SQL
UNIONV 7KLV VWLOO ZRXOG QRW EH DV IDVW DV WKH SINGLE_TABLE VWUDWHJ\ EXW LW ZRXOG SHUIRUP
PXFK EHWWHU WKDQ D PXOWLVHOHFW LPSOHPHQWDWLRQ 7KH GRZQVLGH WR DQ SQL UNION LV WKDW
QRW DOO UHODWLRQDO GDWDEDVHV VXSSRUW WKLV 64/ IHDWXUH ,W LV SUREDEO\ QRW ZLVH WR SLFN WKLV
VWUDWHJ\ ZKHQ GHYHORSLQJ \RXU HQWLW\ EHDQV XQOHVV \RX KDYH JRRG UHDVRQ H J DQ
H[LVWLQJ OHJDF\ VFKHPD

Table per Subclass


,Q WKH WDEOH SHU VXEFODVV PDSSLQJ HDFK VXEFODVV KDV LWV RZQ WDEOH EXW WKLV WDEOH FRQ
WDLQV RQO\ WKH SURSHUWLHV WKDW DUH GHILQHG RQ WKDW SDUWLFXODU FODVV ,Q RWKHU ZRUGV LW LV

200 | Chapter 12:—Entity Inheritance


VLPLODU WR WKH TABLE_PER_CLASS VWUDWHJ\ H[FHSW WKH VFKHPD LV QRUPDOL]HG 7KLV LV DOVR
FDOOHG WKH JOINED VWUDWHJ\
CREATE TABLE "PUBLIC"."JOINED_PERSON"
(
ID bigint PRIMARY KEY NOT NULL,
FIRSTNAME varchar,
LASTNAME varchar
)
;

CREATE TABLE "PUBLIC"."JOINED_CUSTOMER"


(
CITY varchar,
STATE varchar,
STREET varchar,
ZIP varchar,
ID bigint PRIMARY KEY NOT NULL
)
;
ALTER TABLE "PUBLIC"."JOINED_CUSTOMER"
ADD CONSTRAINT FK65AE08146E93989D
FOREIGN KEY (ID)
REFERENCES "PUBLIC"."JOINED_PERSON"(ID)
;

CREATE TABLE "PUBLIC"."JOINED_EMPLOYEE"


(
EMPLOYEEID integer,
EMP_PK bigint PRIMARY KEY NOT NULL
)
;
ALTER TABLE "PUBLIC"."JOINED_EMPLOYEE"
ADD CONSTRAINT FK88AF6EE4D423ED9D
FOREIGN KEY (EMP_PK)
REFERENCES "PUBLIC"."JOINED_CUSTOMER"(EMP_PK)
;

:KHQ WKH SHUVLVWHQFH PDQDJHU ORDGV DQ HQWLW\ WKDW LV D VXEFODVV RU WUDYHUVHV D SRO\
PRUSKLF UHODWLRQVKLS LW GRHV DQ 64/ MRLQ RQ DOO WKH WDEOHV LQ WKH KLHUDUFK\ ,Q WKLV
PDSSLQJ WKHUH PXVW EH D FROXPQ LQ HDFK WDEOH WKDW FDQ EH XVHG WR MRLQ HDFK WDEOH ,Q
RXU H[DPSOH WKH JOINED_EMPLOYEE JOINED_CUSTOMER DQG JOINED_PERSON WDEOHV VKDUH
WKH VDPH SULPDU\ NH\ YDOXHV 7KH DQQRWDWLRQ PDSSLQJ LV TXLWH VLPSOH
@Entity(name="JOINED_PERSON")
@Inheritance(strategy=InheritanceType.JOINED)
public class Person
{
...
}

@Entity(name="JOINED_CUSTOMER")
public class Customer extends Person
{
...

Table per Subclass | 201


}

@Entity(name = "JOINED_EMPLOYEE")
@PrimaryKeyJoinColumn (name="EMP_PK")
public class Employee extends Customer
{
...
}

7KH SHUVLVWHQFH PDQDJHU QHHGV WR NQRZ ZKLFK FROXPQV LQ HDFK WDEOH ZLOO EH XVHG WR
SHUIRUP D MRLQ ZKHQ ORDGLQJ DQ HQWLW\ ZLWK D JOINED LQKHULWDQFH VWUDWHJ\ 7KH
@javax.persistence.PrimaryKeyJoinColumn DQQRWDWLRQ FDQ EH XVHG WR GHVFULEH WKLV
PHWDGDWD
package javax.persistence;

@Target({TYPE, METHOD, FIELD})


public @interface PrimaryKeyJoinColumn
{
String name( ) default "";
String referencedColumnName( ) default "";
String columnDefinition( ) default "";
}

7KH name() DWWULEXWH UHIHUV WR WKH FROXPQ FRQWDLQHG LQ WKH FXUUHQW WDEOH RQ ZKLFK \RX
ZLOO SHUIRUP D MRLQ ,W GHIDXOWV WR WKH SULPDU\ NH\ FROXPQ RI WKH VXSHUFODVV¦V WDEOH 7KH
referencedColumnName() LV WKH FROXPQ WKDW ZLOO EH XVHG WR SHUIRUP WKH MRLQ IURP WKH
VXSHUFODVV¦V WDEOH ,W FDQ EH DQ\ FROXPQ LQ WKH VXSHUFODVV¦V WDEOH EXW LW GHIDXOWV WR LWV
SULPDU\ NH\ ,I WKH SULPDU\ NH\ FROXPQ QDPHV DUH LGHQWLFDO EHWZHHQ WKH EDVH DQG VXE
FODVVHV WKHQ WKLV DQQRWDWLRQ LV QRW QHHGHG )RU LQVWDQFH WKH Customer HQWLW\ GRHV QRW
QHHG WKH @PrimaryKeyJoinColumn DQQRWDWLRQ 7KH Employee FODVV KDV D GLIIHUHQW SULPDU\
NH\ FROXPQ QDPH WKDQ WKH WDEOHV RI LWV VXSHUFODVVHV VR WKH @PrimaryKeyJoinColumn
DQQRWDWLRQ LV UHTXLUHG ,I FODVV KLHUDUFK\ XVHV D FRPSRVLWH NH\ WKHUH LV D
@javax.persistence.PrimaryKeyJoinColumns DQQRWDWLRQ WKDW FDQ GHVFULEH PXOWLSOH MRLQ
FROXPQV
package javax.persistence;

@Target({TYPE, METHOD, FIELD})


public @interface PrimaryKeyJoinColumns
{
@PrimaryKeyJoinColumns[] value( );
}

6RPH SHUVLVWHQFH SURYLGHUV UHTXLUH D GLVFULPLQDWRU FROXPQ IRU WKLV


PDSSLQJ W\SH 0RVW GR QRW 0DNH VXUH WR FKHFN \RXU SHUVLVWHQFH SUR
YLGHU LPSOHPHQWDWLRQ WR VHH ZKHWKHU LW LV UHTXLUHG

202 | Chapter 12:—Entity Inheritance


Advantages
,W LV EHWWHU WR FRPSDUH WKLV PDSSLQJ WR RWKHU VWUDWHJLHV WR GHVFULEH LWV DGYDQWDJHV $O
WKRXJK LW LV QRW DV IDVW DV WKH SINGLE_TABLE VWUDWHJ\ \RX DUH DEOH WR GHILQH NOT NULL
FRQVWUDLQWV RQ DQ\ FROXPQ RI DQ\ WDEOH DQG \RXU PRGHO LV QRUPDOL]HG
7KLV PDSSLQJ LV EHWWHU WKDQ WKH TABLE_PER_CLASS VWUDWHJ\ IRU WZR UHDVRQV 2QH WKH
UHODWLRQDO GDWDEDVH PRGHO LV FRPSOHWHO\ QRUPDOL]HG 7ZR LW SHUIRUPV EHWWHU WKDQ
WKH TABLE_PER_CLASS VWUDWHJ\ LI SQL UNIONV DUH QRW VXSSRUWHG

Disadvantages
,W GRHV QRW SHUIRUP DV ZHOO DV WKH SINGLE_TABLE VWUDWHJ\

Mixing Strategies
7KH SHUVLVWHQFH VSHFLILFDWLRQ FXUUHQWO\ PDNHV PL[LQJ LQKHULWDQFH VWUDWHJLHV RSWLRQDO
7KH UXOHV IRU PL[LQJ VWUDWHJLHV LQ DQ LQKHULWDQFH KLHUDUFK\ PD\ EH GHILQHG LQ IXWXUH
YHUVLRQV RI WKH VSHF

Nonentity Base Classes


7KH LQKHULWDQFH PDSSLQJV ZH GHVFULEHG VR IDU LQ WKLV FKDSWHU FRQFHUQHG D FODVV KLHU
DUFK\ RI HQWLW\ EHDQV 6RPHWLPHV KRZHYHU \RX QHHG WR LQKHULW IURP D QRQHQWLW\
VXSHUFODVV 7KLV VXSHUFODVV PD\ EH DQ H[LVWLQJ FODVV LQ \RXU GRPDLQ PRGHO WKDW \RX GR
QRW ZDQW WR PDNH DQ HQWLW\ 7KH @javax.persistence.MappedSuperclass DQQRWDWLRQ
DOORZV \RX WR GHILQH WKLV NLQG RI PDSSLQJ /HW¦V PRGLI\ RXU H[DPSOH FODVV KLHUDUFK\
DQG FKDQJH Person LQWR D PDSSHG VXSHUFODVV
@MappedSuperclass
public class Person
{
@Id @GeneratedValue
public int getId( ) { return id; }
public void setId(int id) { this.id = is; }
...
}

@Entity
@Table(name="CUSTOMER")
@Inheritance(strategy=InheritanceType.JOINED)
@AttributeOverride(name="lastname", column=@Column(name="SURNAME"))
public class Customer extends Person {
...
}

@Entity
@Table(name="EMPLOYEE")

Nonentity Base Classes | 203


@PrimaryKeyJoinColumn(name="EMP_PK")
public class Employee extends Customer {
...
}

6LQFH LW LV QRW DQ HQWLW\ WKH PDSSHG VXSHUFODVV GRHV QRW KDYH DQ DVVRFLDWHG WDEOH
$Q\ VXEFODVV LQKHULWV WKH SHUVLVWHQFH SURSHUWLHV RI WKH EDVH FODVV <RX FDQ
RYHUULGH DQ\ PDSSHG SURSHUW\ RI WKH PDSSHG FODVV E\ XVLQJ WKH
@javax.persistence.AttributeOverride DQQRWDWLRQ
<RX FDQ KDYH @MappedSuperclass DQQRWDWHG FODVVHV LQ EHWZHHQ WZR @Entity DQQRWDWHG
FODVVHV LQ D JLYHQ KLHUDUFK\ $OVR QRQDQQRWDWHG FODVVHV L H QRW DQQRWDWHG ZLWK
@Entity RU @MappedSuperclass DUH FRPSOHWHO\ LJQRUHG E\ WKH SHUVLVWHQFH SURYLGHU

204 | Chapter 12:—Entity Inheritance

Potrebbero piacerti anche