Hibernate 계승 전략
첫 번 째 방식 은 표 한 장 을 공유 하 는 것 이다.
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="discriminator", discriminatorType=DiscriminatorType.STRING)//
@DiscriminatorValue("person")// ,
public class Parent {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
@DiscriminatorValue("child1")
public class Child1 extends Parent {
private String email;
public String getEmail() {
return title;
}
public void setEmail(String email) {
this.email = email;
}
}
@Entity
@DiscriminatorValue("child2")
public class Child2 extends Parent {
private String address;
public String getAddress() {
return score;
}
public void setAddress(String address) {
this.address = address;
}
}
이러한 경우 부모 클래스 와 모든 하위 클래스 의 모든 정 보 는 같은 표 에 저 장 됩 니 다. 저희 가 지정 한 @ Discriminator Column 에 대응 하 는 @ Discriminator Value 를 통 해 서로 다른 종 류 를 구별 합 니 다.@ Discriminator Value 가 지정 되 지 않 았 을 때 모든 종류의 이름 을 Discriminator Value 로 사용 합 니 다.
두 번 째 정책 은 각 종류의 표 로 모든 정 보 를 저장 하 는 것 입 니 다.
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@TableGenerator( // , id ,@TableGenerator
name="t_gen",
table="t_gen_table",
pkColumnName="t_pk",
valueColumnName="t_value",
pkColumnValue="person_pk",
initialValue=1,
allocationSize=1
)
public class Parent {
private int id;
private String name;
@Id
@GeneratedValue(generator="t_gen", strategy=GenerationType.TABLE)// , id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
public class Child2 extends Parent {
private String address;
public String getAddress() {
return score;
}
public void setAddress(String address) {
this.address = address;
}
}
@Entity
public class Child1 extends Parent {
private String email;
public String getEmail() {
return title;
}
public void setEmail(String email) {
this.email = email;
}
}
동생 의 세 가지 방식 은 시계 연결 방식 을 사용한다.
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Parent {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
public class Child2 extends Parent {
private String address;
public String getAddress() {
return score;
}
public void setAddress(String address) {
this.address = address;
}
}
@Entity
public class Child1 extends Parent {
private String email;
public String getEmail() {
return title;
}
public void setEmail(String email) {
this.email = email;
}
}
표 로 연 결 된 경우, 각 클래스 가 자신의 시 계 를 가지 고 있 는 지, 하위 클래스 에 대응 하 는 시 계 는 하위 클래스 의 정보 만 저장 하고, 부모 클래스 의 정 보 는 부모 클래스 의 시계 에 의 해 저장 된다.하위 클래스 의 전체 정 보 를 가 져 올 때 표 연결 방식 으로 하위 클래스 의 표 와 부모 클래스 의 표를 연결 하여 해당 하 는 정 보 를 얻 습 니 다.하위 클래스 의 표 에 @ Primary KeyJoinColumn (name = "foreign KeyName") 을 표시 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JPA] 즉시로딩(EAGER)과 지연로딩(LAZY) (왜 LAZY 로딩을 써야할까?) (1)Proxy는 이 글의 주제인 즉시로딩과 지연로딩을 구현하는데 중요한 개념인데, 일단 원리는 미뤄두고 즉시로딩과 지연로딩이 무엇인지에 대해 먼저 알아보자. 눈 여겨 볼 곳은 'fetch = FetchType.EAGER...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.