• 转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
  • 相关阅读:
    2020年Android面试题含答案
    flutter系列(一)----- 开发环境搭建
    Android应用安全防护和逆向分析 ——apk混淆成其他语言代码
    Android应用安全防护和逆向分析 ——apk反编译
    Android中 TextView 加载 混合字符 自动换行解决方案
    H5跳转app本地的规则定义
    Android ListView 九大重要属性详细分析
    ListView和ScrollView滑动到顶部
    简要的汇总Android
    关于ViewPager+Fragment中Fragment不销毁/生命周期
  • 原文地址:https://www.cnblogs.com/fsh1542115262/p/4242036.html
Copyright © 2020-2023  润新知