`
cjnetwork
  • 浏览: 181077 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

jpa/hibernate继承注解

阅读更多
hibernate继承映射
以下测试是在mysql中进行的。

1、单表方式
Animal.java
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="animalType")
@DiscriminatorValue("animal")
public class Animal {
	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;
	}
}


Cat.java
@Entity
@DiscriminatorValue("cat")
public class Cat extends Animal {

	private String catName;

	public String getCatName() {
		return catName;
	}
	public void setCatName(String catName) {
		this.catName = catName;
	}
}


Dog.java
@Entity
@DiscriminatorValue(value="dog")
public class Dog extends Animal{
	private String dogName;

	public String getDogName() {
		return dogName;
	}
	public void setDogName(String dogName) {
		this.dogName = dogName;
	}
}


TestJunit.java
	@Test
	public void testAnimal(){
		Animal t = new Animal();
		t.setName("animal");
		session.saveOrUpdate(t);
	}
	
	@Test
	public void testCat(){
		Cat t = new Cat();
		t.setName("cat");
		t.setCatName("cat");
		session.saveOrUpdate(t);
	}
	
	@Test
	public void testDog(){
		Dog t = new Dog();
		t.setName("dog");
		t.setDogName("dog");
		session.saveOrUpdate(t);
	}


对应生成的数据表是这样的
table---animal
idnameanimalTypecatNamedogName
1animalanimalnullnull
2catcatcatnull
3dogdognulldog


2、join方式
Animal.java
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Animal {
	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;
	}
}


Cat.java
@Entity
@PrimaryKeyJoinColumn(name="catId")
public class Cat extends Animal {

	private String catName;

	public String getCatName() {
		return catName;
	}
	public void setCatName(String catName) {
		this.catName = catName;
	}
}


Dog.java
@Entity
@PrimaryKeyJoinColumn(name="dogId")
public class Dog extends Animal{
	private String dogName;

	public String getDogName() {
		return dogName;
	}
	public void setDogName(String dogName) {
		this.dogName = dogName;
	}
}


TestJunit.java
	@Test
	public void testAnimal(){
		Animal t = new Animal();
		t.setName("animal");
		session.saveOrUpdate(t);
	}
	
	@Test
	public void testCat(){
		Cat t = new Cat();
		t.setName("cat");
		t.setCatName("cat");
		session.saveOrUpdate(t);
	}
	
	@Test
	public void testDog(){
		Dog t = new Dog();
		t.setName("dog");
		t.setDogName("dog");
		session.saveOrUpdate(t);
	}


对应生成的数据表是这样的
table---Animal
idname
1animal
2cat
3dog


table---cat
catIdcatName
2cat


table---dog
dogIddogName
3dog



3、每个实体类对应一个数据表
以下的测试中,Anamal.java中的主键生成策略需要注解成@GeneratedValue(strategy=GenerationType.TABLE),测试是在mysql数据库中进行的。
Animal.java
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Animal {
	private int id;
	private String name;
	
	@Id
	@GeneratedValue(strategy=GenerationType.TABLE)
	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;
	}
}


Cat.java
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Cat extends Animal {

	private String catName;

	public String getCatName() {
		return catName;
	}
	public void setCatName(String catName) {
		this.catName = catName;
	}
}


Dog.java
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Dog extends Animal{
	private String dogName;

	public String getDogName() {
		return dogName;
	}
	public void setDogName(String dogName) {
		this.dogName = dogName;
	}
}


TestJunit.java
	@Test
	public void testAnimal(){
		Animal t = new Animal();
		t.setName("animal");
		session.saveOrUpdate(t);
	}
	
	@Test
	public void testCat(){
		Cat t = new Cat();
		t.setName("cat");
		t.setCatName("cat");
		session.saveOrUpdate(t);
	}
	
	@Test
	public void testDog(){
		Dog t = new Dog();
		t.setName("dog");
		t.setDogName("dog");
		session.saveOrUpdate(t);
	}



对应生成的数据表是这样的
table---animal
idname
1animal


table---cat
idnamecatName
2catcat


table---dog
idnamedogName
3dogdog




分享到:
评论
8 楼 cjnetwork 2014-11-17  
aaaaaaaaad
7 楼 cjnetwork 2014-11-16  
实得分实得分实得分
6 楼 cjnetwork 2014-11-16  
aaaaaaaaad
5 楼 cjnetwork 2014-11-16  
aaaaaaaaa
4 楼 cjnetwork 2014-11-16  
实得分算法实得分
3 楼 cjnetwork 2014-11-16  
哈哈 实得分实得分
2 楼 cndavy 2014-09-24  
      good news
1 楼 ddcz 2011-12-01  
好文章,以前一直不会

相关推荐

Global site tag (gtag.js) - Google Analytics