hibernate 学习之四 (多对多映射)

今天接下来我们学习下hibernate里面的多对多的关系映射

多对多:由三张表组成,如学生表,课程表与学生课程表,一个学生可以参加多门课程,一个课程可以被多个学生参加。用户表,商品表,订单表。一个用户可以购买多个商品,一个商品可以供多个用户购买
这么说也就是得有一个中间关系表里面存2个表的主键;进行关联

首先我们从实体类想也就是说学生表里有课程的集合,课程里面有学生的集合对象;

public class Coures {

    private Long id;
    private String name;
    private Set<Student> students;
public class Student {

    private Long id;
    private String name;
    private Set<Coures> coures;

映射文件:
学生映射文件:

<hibernate-mapping>
    <class name="com.wfg.bean.Student" table="student" catalog="manytomany">
        <id name="id" type="java.lang.Long">
            <column name="ID" />
            <generator class="native" />
        </id>
         <property name="name" type="java.lang.String">
            <column name="NAME" length="15" />
        </property>

       <!-- table 这里是指中间表 -->
        <set name="coures"  cascade="save-update" table="stu_cour">
            <key>
                <column name="student_ID" />
            </key>
            <!-- 这2个column 不要搞颠倒  上面的表示对方的外键 和 一对多一样的  下面的是被关联表做外键 -->
            <many-to-many class="com.wfg.bean.Coures"  column="course_id"></many-to-many>
        </set>
    </class>
</hibernate-mapping>

课程映射文件:

<hibernate-mapping>
    <class name="com.wfg.bean.Coures" table="coures" catalog="manytomany">
        <id name="id" type="java.lang.Long">
            <column name="ID" />
            <generator class="native" />
        </id>
         <property name="name" type="java.lang.String">
            <column name="NAME" length="15" />
        </property>
      <set name="students"  table="stu_cour" cascade="save-update" inverse="true">
            <key>
                <column name="course_id" />
            </key>
            <many-to-many class="com.wfg.bean.Student" column="student_ID"></many-to-many>
        </set>
    </class>
</hibernate-mapping>

这里写图片描述

使用下面的方法生成sql语句创建表:

public static void main(String[] args) {
        Configuration configuration =new Configuration().configure();
        SchemaExport sch = new SchemaExport(configuration);
        sch.create(true, false);
    }

测试代码:

Student stu1 = new Student();
            stu1.setName("张三");


            Coures cou1 = new Coures();
            cou1.setName("chinense");

            stu1.setCoures(new HashSet<Coures>());
            cou1.setStudents(new HashSet<Student>());

            //建立关系
            stu1.getCoures().add(cou1);
            cou1.getStudents().add(stu1);
            // session.save(stu1);
            session.save(cou1);

我在写demo的时候发现了其中一个问题:也就是前面写一对一,一对多时把数据库名称都是写在了映射文件上面:即catalog=”manytomany”
这个catalog属性配置的,但是这个多对多这么配置是不可以
这里写图片描述
会报如此的错误:
这2个提示是这么个意思:
Could not execute JDBC batch update 原因可能是映射文件有问题(但不仅限于此原因)我再三看我写的映射文件没问题,又一看下面
No database selected 这个是说没找不到相应的数据库
我便常识在hibernate的主配置文件里面添加了数据库名称
property name=”connection.url”>
jdbc:mysql://127.0.0.1:3306/manytomany

博客里面考虑篇幅太长所以代码都是关键代码不是全部,要获取全部代码可以自行下载:
链接:http://pan.baidu.com/s/1kU5zXmZ 密码:1wt1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值