Hibernate 계승 전략

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") 을 표시 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기