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
  • 相关阅读:
    Spring使用@Value注解各种类型的值
    Jdom生成xml文件时的特殊字符问题
    将博客搬至CSDN
    ubuntu/mint添加字体
    linux保持ssh连接
    servlet 重定向与转发区别
    u盘写保护
    修改默认终端
    sudo apt-get update 无法获得锁
    logback多线程日志MDC
  • 原文地址:https://www.cnblogs.com/fsh1542115262/p/4242036.html
Copyright © 2011-2022 走看看