在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人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦