1対多、多対1の休止状態

1対多の実列問題ロジック:
1人の学生が複数のユーザーアカウントに対応し、外部キーを使用して
1.studentエンティティクラスを実装します。

public class HStudent {
    
    
private int sid ;
private String sname ;
private Set<HUser> userSet = new HashSet();
}

2.ユーザーエンティティクラス

public class HUser {
    
    
private int uid ;
private String uname ; 
private HStudent student;
}

3.マッピングファイルを構成します

在user方加入
<many-to-one name="customer" class="bean.Customer"  column="clid">
在student方加入
<set name="setLinkMan" cascade="save-update" >
<key column = "clid"></key>//对应外键名
<one-to-many class ="bean.LinkMan"></one-to-many>
//class对应的多的完整路径
</set>

多対多の問題ロジック:
1人の学生が複数のコースを選択でき、1つのコースを複数の学生が選択できます
1.学生エンティティクラス

public class Student {
    
    
    private Integer sid;
    private String sname;
    private Set<Course> courses  = new HashSet<Course>();
    public Integer getSid() {
    
    
        return sid;
    }
    public void setSid(Integer sid) {
    
    
        this.sid = sid;
    }

    public String getSname() {
    
    
        return sname;
    }

    public void setSname(String sname) {
    
    
        this.sname = sname;
    }

    public Set<Course> getCourses() {
    
    
        return courses;
    }

    public void setCourses(Set<Course> courses) {
    
    
        this.courses = courses;
    }
}

2.コースエンティティ

public class Course {
    
    
    private Integer cid;
    private String cname;
    private Set<Student> students = new HashSet<Student>();
    public Integer getCid() {
    
    
        return cid;
    }
    public void setCid(Integer cid) {
    
    
        this.cid = cid;
    }
    public String getCname() {
    
    
        return cname;
    }

    public void setCname(String cname) {
    
    
        this.cname = cname;
    }

    public Set<Student> getStudents() {
    
    
        return students;
    }

    public void setStudents(Set<Student> students) {
    
    
        this.students = students;
    }
}

3.学生マッピングファイル

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="bean.Student" table="t_student">
        <!--,主键属性  -->
        <id name="sid" column="sid">
            <generator class="native"></generator>
        </id>
        <!--,其它属性 -->
        <property name="sname" column="sname"/>

        <!--,表示和课程的关系 -->
        <!--3.1 set标签的name属性:当前类中集合的名字
                table:第三方表名
             -->
        <set name="courses" table="s_c_tab" >
            <!--3.2 key的 column表示当前类在中间表中的外键 -->
            <key column="sid" not-null="false" />
            <!--3.3 many-to-many表示多对多关系
                column:表示另一方在中间表中的外键
                class:表示另一方类的全限定名
          -->
            <many-to-many column="cid" class="bean.Course" ></many-to-many>
        </set>
    </class>
</hibernate-mappin

4.コースマッピングファイル

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="bean.Course" table="t_course">
        <!--,主键属性  -->
        <id name="cid" column="cid">
            <generator class="native"></generator>
        </id>
        <!--,其它属性 -->
        <property name="cname" column="cname"/>
        <!--,表示和课程的关系 -->
        <!--3.1 set标签的name属性:当前类中集合的名字
            table:第三方表名
        -->
        <set name="students" table="s_c_tab" inverse="true"><!--inverse = true 关系维护,基表为course 只有一方放置即可 -->
            <!--3.2 key的 column表示当前类在中间表中的外键 -->
            <key column="cid" not-null="false"/>
            <!--3.3 many-to-many表示多对多关系
                column:表示另一方在中间表中的外键
                class:表示另一方类的全限定名
          -->
            <many-to-many column="sid" class="bean.Student"></many-to-many>
        </set>
    </class>
</hibernate-mapping>

5.テストクラス

public class TestManytoMany {
    
    
    public   static  void test1(){
    
    
        Session session = DButils.getSession();
        Transaction transaction = session.beginTransaction();
        Student stu1= new Student();
        stu1.setSname("zhang san");
        Student stu2 =new Student();
        stu2.setSname("li si");
        Course c1= new Course();
        c1.setCname("english");
        Course c2 = new Course();
        c2.setCname("french");
        Course c3 = new Course();
        c3.setCname("math");
        stu1.getCourses().add(c1);
        stu1.getCourses().add(c2);

        stu2.getCourses().add(c2);
        stu2.getCourses().add(c3);

        c1.getStudents().add(stu1);
        c2.getStudents().add(stu1);
        c2.getStudents().add(stu2);
        c3.getStudents().add(stu2);
        session.save(stu1);
        session.save(stu2);
        session.save(c1);
        session.save(c2);
        session.save(c3);
        DButils.commit(transaction);
    }
    public  static  void main(String args[]) throws  Exception{
    
    
        test1();
    }
}

おすすめ

転載: blog.csdn.net/weixin_44703894/article/details/111660985