関連マッピング(および多対多)を休止する始動III

先端、入力操作は、本明細書トップと2であります

マップの種類を休止

学習の初めに、私は多くの、多くのツーことと同じだと思いますが、後者の場合、例えば、クラスの先生と生徒をない見つけ、クラスは複数の学生を持っているかもしれませんが、一つだけ、教師、生徒と教師関係が多くあり、教師と生徒の関係は、2つの違いは、彼らの指向多いされています

  • ワン(1対1)
  • 対多(ONT対多)
  • 多対(多対1)
  • 多対(多対多)

多1(多対1)マッピングの最も一般的で人気のあるタイプをやってから(ONT対多)と、多くの

 

対多(ONT対多)

1、(外部キーによって関連付けクラステーブルや学生のテーブルを作成します

ALTER TABLEの学生は制約が外部キー(GID)参照グレード(GID)をfk_students_gid追加します。

 

2、テーブルにエンティティクラスを作成し、学生のクラステーブル(属性/デフォルトコンストラクタ、パラメータ化コンストラクタ、取得、およびメソッドを設定し、のtoStringメソッド)

int型GIDプライベート; 
プライベート文字列gnameは、
プライベート文字列gdesc;
//マルチパーティのセットのうちの1つを定義する
プライベート設定<学生>学生=新しい HashSetのを<学生>();
//他の人。わずか}

 

public class Students {

    private int sid;
    private String sname;
    private String gender;
    private Date birthday;
    //private String address;
    private Blob pictur;
    private Address address;

//其他。。。略
}

 3、创建Grade.hbm.xml(我的Stuendt.hbm.xml已经配置好了)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.hibernate.entity.Grade" table="grade">
        <id name="gid" column="gid" type="int">
            <generator class="increment"></generator>
        </id>
        <property name="gname" type="java.lang.String">
            <column name="gname"/>
        </property>
        <property name="gdesc" type="java.lang.String">
            <column name="gdesc"/>
        </property>
        <!--单项的一对多的关系-->
        <set name="students" table="Students">
            <!--指定的关联外键列-->
            <key column="gid"></key>
            <one-to-many class="com.hibernate.entity.Students"/>
        </set>

    </class>


</hibernate-mapping>

 4、在cfg.xml中配置映射文件路径

<!--指定映射文件的路径-->
    <mapping resource="com/hibernate/entity/Grade.hbm.xml"/>
    <mapping resource="com/hibernate/entity/Students.hbm.xml"/>

 5、创建HibernateUtil类

public class HibernadUtil {

    private static SessionFactory sessionFactory;
    private static Session session;

    static {
        StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
        sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
    }

    //获取SessionFacory
    public static SessionFactory getSessionFacory() {
        return sessionFactory;
    }

    //获取session
    public static Session getSession() {

        return sessionFactory.openSession();
    }

    //关闭session
    public static void closeSession(Session session) {
        if (null != session) {
            session.close();
        }
    }

 6、进行测试

 

public class TestStudentsAndGrade {

    public static void main(String[] args) {
        //add();
        //findStudensByGrade();
        //update();
        deleteStudentsBySid();
    }

    //给表中插入数据
    public static void add() {
        Grade grade = new Grade("道班", "道一");
        Students s = new Students("道一", "男", new Date());
        Students s2 = new Students("阴阳", "男", new Date());
        Students s3 = new Students("三生", "女", new Date());
        System.out.println(grade.getStudents().add(s));
        //如果希望在学生表中添加对应道班级编号,需要在班级中添加学生,建立关联关系
        grade.getStudents().add(s);
        grade.getStudents().add(s2);
        grade.getStudents().add(s3);

        Session session = HibernadUtil.getSession();
        //开启事务
        Transaction transaction = session.beginTransaction();
        session.save(grade);
        session.save(s);
        session.save(s2);
        session.save(s3);
        transaction.commit();
        HibernadUtil.closeSession(session);
    }

    //查询班级中包含的学生
    public static void findStudensByGrade() {
        //获取session
        Session session = HibernadUtil.getSession();
        //获取班级信息
        Grade grade = session.get(Grade.class, 1);
        //输出班级信息
        System.out.println(grade.getGname() + "," + grade.getGdesc());

        //找出班级信息,然后找出班级学生信息
        Set<Students> students = grade.getStudents();
        for (Students stu:students
             ) {
            System.out.println(stu);
        }
    }

    //修改学生信息
    public static void update(){
        Grade grade =new Grade("道","道二");
        Session session = HibernadUtil.getSession();
        Transaction transaction = session.beginTransaction();

        //修改学生所在班级信息(grade班级信息为自增长,别一不小心玩过头了)
        Students students = session.get(Students.class, 2);
        grade.getStudents().add(students);
        session.save(grade);
        transaction.commit();
        HibernadUtil.closeSession(session);
    }

    //从班级中删除学生信息
    public static  void deleteStudentsBySid(){

        Session session = HibernadUtil.getSession();
        Transaction transaction = session.beginTransaction();
        Students students = session.get(Students.class,9);
        session.delete(students);
        transaction.commit();
        HibernadUtil.closeSession(session);

    }

}

 7、一对多中的set元素属性

多对一(many-to-one)

 

おすすめ

転載: www.cnblogs.com/lindaiyu/p/10994131.html
おすすめ