1. 程式人生 > >Hibernate學習7—Hibernate 映射繼承

Hibernate學習7—Hibernate 映射繼承

util list uid per ges setname rop uname int

需求:學生有很多照片,分為生活照和工作照;

第一節:每個具體類對應一個表                        

Student.java:

技術分享
package com.cy.model;

import java.util.Set;

public class Student {
    private int id;
    private String name;
    private Set<Image> images;
    
    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; } public Set<Image> getImages() { return images; } public void setImages(Set<Image> images) { this.images = images; } }
View Code

抽象類Image.java:

技術分享
package com.cy.model;

public abstract class Image {
    private int id;
    private String imageName;
    private Student student;
    
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getImageName() {
        
return imageName; } public void setImageName(String imageName) { this.imageName = imageName; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } }
View Code

生活照LifeImage.java:

技術分享
package com.cy.model;

public class LifeImage extends Image{

}
View Code

工作照WorkImage.java:

技術分享
package com.cy.model;

public class WorkImage extends Image{

}
View Code

Student.hbm.xml:

<hibernate-mapping package="com.cy.model">

    <class name="Student" table="t_student">
        <id name="id" column="stuId">
            <generator class="native"></generator>
        </id>
        <property name="name" column="stuName"></property>
    </class>

</hibernate-mapping>

LifeImage.hbm.xml:

技術分享
<hibernate-mapping package="com.cy.model">

    <class name="LifeImage" table="t_lifeImage">
        <id name="id" column="lifeImageId">
            <generator class="native"></generator>
        </id>
        <property name="imageName" column="imageName"></property>
        
        <many-to-one name="student" column="stuId" class="com.cy.model.Student"></many-to-one>
    </class>

</hibernate-mapping>
View Code

WorkImage.hbm.xml:

技術分享
<hibernate-mapping package="com.cy.model">

    <class name="WorkImage" table="t_workImage">
        <id name="id" column="workImageId">
            <generator class="native"></generator>
        </id>
        <property name="imageName" column="imageName"></property>
        
        <many-to-one name="student" column="stuId" class="com.cy.model.Student"></many-to-one>
    </class>

</hibernate-mapping>
View Code

測試代碼StudentTest.java:

技術分享
    @Test
    public void testGetAllImages(){
        List<Image> imageList = new ArrayList<Image>();
        int stuId = 1;
        List<Image> lifeImageList = (List<Image>)session.createQuery("from LifeImage l where l.student.id = " + stuId).list();
        imageList.addAll(lifeImageList);
        List<Image> workImageList = (List<Image>)session.createQuery("from WorkImage w where w.student.id = " + stuId).list();
        imageList.addAll(workImageList);
        for(Image image: imageList){
            System.out.println(image.getImageName());
        }
        
    }
View Code

三個表的關聯關系:

技術分享

t_lifeimage表結構:

技術分享

t_lifeimage表數據:

技術分享

t_workimage表數據:

技術分享

第二節:根類對應一個表                                      

Hibernate學習7—Hibernate 映射繼承