Hibernate many to many 配置

和one to one 一样,首先写了两个实体类
Course (
private int cou_id;
private String cou_name;)和
Student (
private int stu_id;
private String stu_name;
private Set<Course> courses;)生成get,set方法,
然后配置实体类的映射文件Course.hbm.xml和Student.hbm.xml
代码:
----------Course.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="cn.hdu.entity.Course" table="COURSE">
<id name="cou_id" column="COU_ID">

<generator class="sequence"><param

name="sequence">COU_sequences</param></generator>
</id>

<property name="cou_name" column="COU_NAME"></property>


<set name="students" cascade="save-update" lazy="false"

table="STUDENT_COURSE">
<key column="COU_ID"></key>
<many-to-many class="cn.hdu.entity.Student" column="STU_ID"></many-to

-many>
</set>
</class>

</hibernate-mapping>

-----------Student.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="cn.hdu.entity.Student" table="STUDENT">
<id name="stu_id" column="STU_ID">

<generator class="sequence"><param

name="sequence">STU_SEQUENCES</param></generator>
</id>

<property name="stu_name" column="STU_NAME"></property>


<set name="courses" cascade="save-update" lazy="false"

table="STUDENT_COURSE">
<key column="STU_ID"></key>
<many-to-many class="cn.hdu.entity.Course" column="COU_ID"></many-to-

many>
</set>
</class>

</hibernate-mapping>


注意:属性的解释大多同于 one to one例子(详见Hibernate one to one配置

),这里多对对的情况采用中间表的形式,也就是说数据库中要建立第三张表

table="STUDENT_COURSE",存储STU_ID和COU_ID字段;many to many属性使得
STU_ID和COU_ID分别对应表中多条记录,也就是一门课程有多个学生,一个学
生有多门课程。
做完映射之后同样不要忘记把映射文件写入hibernate.cfg.xml;
代码:
<session-factory>
.........
<property name="show_sql">TRUE</property>
<mapping resource="cn/hdu/entity/Student.hbm.xml" />
<mapping resource="cn/hdu/entity/Course.hbm.xml" />
</session-factory>


写一个实现类
public class ServiceImp {

public List<Course> getCourseAll() {
Session session=HibernateSessionFactory.getSession();
Query query=session.createQuery("from Course");
List<Course> list=query.list();
HibernateSessionFactory.closeSession();
return list;
}
}
测试类:
public class Test{
public static void main(String[] args) {
ServiceImp service = new ServiceImp();
List<Course> list=service.getCourseAll();
for(Course cc:list)
{ System.out.println("课程名字:");

System.out.println(cc.getCou_name());

}


看下查询后输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值