为了账号安全,请及时绑定邮箱和手机立即绑定

Hibernate中关于一对多的实例配置

标签:
Java

在hibernate中实现一对多的关联映射。

1、多的一方实体类:

public class Book {
    private int id;
    private String bookName;
    private String bookAuthor;
    private double bookPrice;
    private Poet poet;//一的一方,在多的一方需要维护一个一的一方的引用。
/**
这下面为get/set方法
*/
}

2、一的一方实体类:

private int id;
    private String name;
    private int age;
    private Set<Book> book = new HashSet<>();//需要将多的一方直接创建出来。使用泛型,表明多的一方的类型。
/**
这下面为get/set方法
*/
}

3、Book类的配置文件:

<?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="com.bean.Book">
  <id name="id"><generator class="native"></generator></id>
  <property name="bookName" type="string"></property>
  <property name="bookAuthor" type="string"></property>
  <property name="bookPrice" type="double"></property>
  <many-to-one name="poet" class="com.bean.Poet" column="poet_id"/>
</class>    
</hibernate-mapping>

Poet类的配置文件:

<?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="com.bean.Poet">
         <id name="id">
           <generator class="native"></generator>
         </id>
         <property name="name" type="string"></property>
         <property name="age" type="int"></property>
         <!-- 特别要注意这个cascade这个属性,必须有,且为all -->
         <set name="book" table="poet_books" cascade="all">
           <key column="poet_id"></key>
           <one-to-many class="com.bean.Book"></one-to-many>
         </set>
       </class>
    </hibernate-mapping>

4、测试代码:

@Test
    public void saveComplexset(){
        Book b1 = new Book("红楼梦", "曹雪芹", 34);
        Book b2 = new Book("活着", "余华", 34.58);
        Poet p = new Poet();
        p.setAge(84);
        p.setName("刘4");
        Set<Book> set  = new HashSet<>();
        set.add(b2);
        set.add(b1);
        b1.setPoet(p);//这两句话不可少,将多于一关联在一起。
        b2.setPoet(p);//这两句话不可少,将多于一关联在一起。
        p.setBook(set);

        //下面这行代码,用了一个工具类来获取hibernate的session对象
        //自己只要获取session对象即可,不管用什么方法
        Session session = HibernateUtil.getSession();
        Transaction tran = session.beginTransaction();
        session.save(p);
        System.out.println("保存成功");
        tran.commit();
        session.close();
    }

5、按照上面的内容,亲测hibernate-core-5.1.0.Final.jar完全可以跑的通。初次写作多多指教。

点击查看更多内容
4人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消