• Hibernate表中多对多关系的映射


          在Hibernate中,有很多的映射,譬如说是一对一、一对多、多对一、多对多关系。当然对于SSH初学者而言,一对多和多对一是比较容易的,而对于一对一,和多对多有时后就会感觉头疼了。

    •   一对一,我们直接就可以用<one-to-one/>标签可以解决。

               例如:人和用户之间的关系,假设一个人只能有一个用户,一个用户只能被一个人拥有,他们就是一个一对一的关系。

    <one-to-one name="person" cascade="sava-update"/>
    •     上面只是方法之一,我们也可以变通为,两个多对一,但是的添加一个属性unique="true"
    <many-to-one name="person" unique="true" cascade="save-update"/>

    /*--------------------------------------------------------------*/
    <many-to-one name="user" unique="true" cascade="save-update"/>
    •      多对多的使用中间表没有其他的字段,以及转换成两个一对多的情况我在这而就不给与讨论了,我想讨论的是中间表有其他字段的情况。

                  例如Student类和Course类,他们之间是多对多的情况,而我想在中间表中添加一个成绩记录,这是我们在Hibernate中如何解决了?下面给出例子的整个过程:

              Student类:

    public class Student {
    private int id;
    private String name;
    private Map courses;

    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 Map getCourses() {
    return courses;
    }
    public void setCourses(Map courses) {
    this.courses = courses;
    }
    }

              Course类:

    public class Course {
    private int id;
    private String name;
    private Map students;

    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 Map getStudents() {
    return students;
    }
    public void setStudents(Map students) {
    this.students = students;
    }
    }

         成绩表:

    public class Score {
    private int score;

    public int getScore() {
    return score;
    }

    public void setScore(int score) {
    this.score = score;
    }
    }

         Hibernate配置文件:

    <hibernate-mapping package="com.org.model">
    <class name="Student" table="t_student">
    <id name="id">
    <generator class="native"/>
    </id>
    <property name="name" column="s_name" type="string" />
    <map name="courses" table="t_score" >
    <key column="s_id"/>
    <map-key-many-to-many column="c_id" class="Course" />
    <composite-element class="Score">
    <property name="score"/>
    </composite-element>
    </map>
    </class>
    </hibernate-mapping>
    <hibernate-mapping package="com.org.model">
    <class name="Course" table="t_scourse">
    <id name="id">
    <generator class="native"/>
    </id>
    <property name="name" column="c_name" />
    <map name="students" table="t_score">
    <key column="c_id" />
    <map-key-many-to-many column="s_id" class="Student" />
    <composite-element class="Score">
    <parent name="score"/>
    </composite-element>
    </map>
    </class>
    </hibernate-mapping>




     

             


     

  • 相关阅读:
    Java中存取权限和修饰符public、private、protected和default的区别和联系
    java集合之ArrayList,TreeSet和HashMap分析
    ResultSet,RowSet,OracleCachedRowSet和RowSetMetaData区别及联系
    实战篇
    kubernetes系列之 service代理模式ipvs
    Python Jinja2的简单使用
    Helm v3从入门到实战
    迷宫
    python多线程下载文件
    乱码,编码
  • 原文地址:https://www.cnblogs.com/sqljiang0916/p/2272647.html
Copyright © 2020-2023  润新知