zoukankan      html  css  js  c++  java
  • 转Hibernate继承

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

    1、单表方式 
    Animal.java 

    Java代码  收藏代码
    1. @Entity  
    2. @Inheritance(strategy=InheritanceType.SINGLE_TABLE)  
    3. @DiscriminatorColumn(name="animalType")  
    4. @DiscriminatorValue("animal")  
    5. public class Animal {  
    6.     private int id;  
    7.     private String name;  
    8.       
    9.     @Id  
    10.     @GeneratedValue  
    11.     public int getId() {  
    12.         return id;  
    13.     }  
    14.     public void setId(int id) {  
    15.         this.id = id;  
    16.     }  
    17.     public String getName() {  
    18.         return name;  
    19.     }  
    20.     public void setName(String name) {  
    21.         this.name = name;  
    22.     }  
    23. }  



    Cat.java 

    Java代码  收藏代码
    1. @Entity  
    2. @DiscriminatorValue("cat")  
    3. public class Cat extends Animal {  
    4.   
    5.     private String catName;  
    6.   
    7.     public String getCatName() {  
    8.         return catName;  
    9.     }  
    10.     public void setCatName(String catName) {  
    11.         this.catName = catName;  
    12.     }  
    13. }  



    Dog.java 

    Java代码  收藏代码
    1. @Entity  
    2. @DiscriminatorValue(value="dog")  
    3. public class Dog extends Animal{  
    4.     private String dogName;  
    5.   
    6.     public String getDogName() {  
    7.         return dogName;  
    8.     }  
    9.     public void setDogName(String dogName) {  
    10.         this.dogName = dogName;  
    11.     }  
    12. }  



    TestJunit.java 

    Java代码  收藏代码
    1. @Test  
    2. public void testAnimal(){  
    3.     Animal t = new Animal();  
    4.     t.setName("animal");  
    5.     session.saveOrUpdate(t);  
    6. }  
    7.   
    8. @Test  
    9. public void testCat(){  
    10.     Cat t = new Cat();  
    11.     t.setName("cat");  
    12.     t.setCatName("cat");  
    13.     session.saveOrUpdate(t);  
    14. }  
    15.   
    16. @Test  
    17. public void testDog(){  
    18.     Dog t = new Dog();  
    19.     t.setName("dog");  
    20.     t.setDogName("dog");  
    21.     session.saveOrUpdate(t);  
    22. }  



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

    id name animalType catName dogName
    1 animal animal null null
    2 cat cat cat null
    3 dog dog null dog



    2、join方式 
    Animal.java 

    Java代码  收藏代码
    1. @Entity  
    2. @Inheritance(strategy=InheritanceType.JOINED)  
    3. public class Animal {  
    4.     private int id;  
    5.     private String name;  
    6.       
    7.     @Id  
    8.     @GeneratedValue  
    9.     public int getId() {  
    10.         return id;  
    11.     }  
    12.     public void setId(int id) {  
    13.         this.id = id;  
    14.     }  
    15.     public String getName() {  
    16.         return name;  
    17.     }  
    18.     public void setName(String name) {  
    19.         this.name = name;  
    20.     }  
    21. }  



    Cat.java 

    Java代码  收藏代码
    1. @Entity  
    2. @PrimaryKeyJoinColumn(name="catId")  
    3. public class Cat extends Animal {  
    4.   
    5.     private String catName;  
    6.   
    7.     public String getCatName() {  
    8.         return catName;  
    9.     }  
    10.     public void setCatName(String catName) {  
    11.         this.catName = catName;  
    12.     }  
    13. }  



    Dog.java 

    Java代码  收藏代码
    1. @Entity  
    2. @PrimaryKeyJoinColumn(name="dogId")  
    3. public class Dog extends Animal{  
    4.     private String dogName;  
    5.   
    6.     public String getDogName() {  
    7.         return dogName;  
    8.     }  
    9.     public void setDogName(String dogName) {  
    10.         this.dogName = dogName;  
    11.     }  
    12. }  



    TestJunit.java 

    Java代码  收藏代码
    1. @Test  
    2. public void testAnimal(){  
    3.     Animal t = new Animal();  
    4.     t.setName("animal");  
    5.     session.saveOrUpdate(t);  
    6. }  
    7.   
    8. @Test  
    9. public void testCat(){  
    10.     Cat t = new Cat();  
    11.     t.setName("cat");  
    12.     t.setCatName("cat");  
    13.     session.saveOrUpdate(t);  
    14. }  
    15.   
    16. @Test  
    17. public void testDog(){  
    18.     Dog t = new Dog();  
    19.     t.setName("dog");  
    20.     t.setDogName("dog");  
    21.     session.saveOrUpdate(t);  
    22. }  



    对应生成的数据表是这样的 
    table---Animal 

    id name
    1 animal
    2 cat
    3 dog



    table---cat 

    catId catName
    2 cat



    table---dog 

    dogId dogName
    3 dog




    3、每个实体类对应一个数据表 
    以下的测试中,Anamal.java中的主键生成策略需要注解成@GeneratedValue(strategy=GenerationType.TABLE),测试是在mysql数据库中进行的。 
    Animal.java 

    Java代码  收藏代码
    1. @Entity  
    2. @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)  
    3. public class Animal {  
    4.     private int id;  
    5.     private String name;  
    6.       
    7.     @Id  
    8.     @GeneratedValue(strategy=GenerationType.TABLE)  
    9.     public int getId() {  
    10.         return id;  
    11.     }  
    12.     public void setId(int id) {  
    13.         this.id = id;  
    14.     }  
    15.     public String getName() {  
    16.         return name;  
    17.     }  
    18.     public void setName(String name) {  
    19.         this.name = name;  
    20.     }  
    21. }  



    Cat.java 

    Java代码  收藏代码
    1. @Entity  
    2. @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)  
    3. public class Cat extends Animal {  
    4.   
    5.     private String catName;  
    6.   
    7.     public String getCatName() {  
    8.         return catName;  
    9.     }  
    10.     public void setCatName(String catName) {  
    11.         this.catName = catName;  
    12.     }  
    13. }  



    Dog.java 

    Java代码  收藏代码
    1. @Entity  
    2. @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)  
    3. public class Dog extends Animal{  
    4.     private String dogName;  
    5.   
    6.     public String getDogName() {  
    7.         return dogName;  
    8.     }  
    9.     public void setDogName(String dogName) {  
    10.         this.dogName = dogName;  
    11.     }  
    12. }  



    TestJunit.java 

    Java代码  收藏代码
    1. @Test  
    2. public void testAnimal(){  
    3.     Animal t = new Animal();  
    4.     t.setName("animal");  
    5.     session.saveOrUpdate(t);  
    6. }  
    7.   
    8. @Test  
    9. public void testCat(){  
    10.     Cat t = new Cat();  
    11.     t.setName("cat");  
    12.     t.setCatName("cat");  
    13.     session.saveOrUpdate(t);  
    14. }  
    15.   
    16. @Test  
    17. public void testDog(){  
    18.     Dog t = new Dog();  
    19.     t.setName("dog");  
    20.     t.setDogName("dog");  
    21.     session.saveOrUpdate(t);  
    22. }  




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

    id name
    1 animal



    table---cat 

    id name catName
    2 cat cat



    table---dog 

    id name dogName
    3 dog dog
  • 相关阅读:
    if __name__
    Python为什么要self
    ubuntu系统中的svn三连
    Python中读取到16进制数如何转成有符号数值
    知网
    Ubuntu 登陆后黑屏 问题解决
    Ubuntu 开机Recovery-Mode,命令行中操作提示 Read-Only File System 只读文件系统的 问题解决
    句子:霓裳虽美始于宫娥之糙手
    VMware 虚拟机 不能打开的解决方案汇总
    Ubuntu 系统安装 数据恢复软件 ext4magic 通过RPM方式
  • 原文地址:https://www.cnblogs.com/fsh1542115262/p/4242036.html
Copyright © 2011-2022 走看看