//实体类关系是一个用户对应多个地址
public class User {
private int id;
private String name;
private double money;
private int count ;
private Set<Address> address;
// 提供对应的get/set方法
...
}
public class Address {
private int id;
private String ip;
private String name;
private User user;
// 提供对应的get/set方法
...
}
xml配置文件内容
<hibernate-mapping package="org.com.core.pojo">
<class name="User" table="saber">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name" />
<property name="money" type="double"/>
<!--
cascade 级联操作 all表示所以操作都跟关联表一起
inverse 表示关系控制权交给哪个管理,这里表示交个从表来管理
配置多的一面的时候要使用set,key是指定外键名的
-->
<set name="address" inverse="true" cascade="all">
<key column="u_id"/>
<one-to-many class="Address"/>
</set>
</class>
<!-- 指定实体类的表 -->
<class name="Address" table="t_sys_address">
<!-- 配置表的属性 -->
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="ip" />
<property name="name"/>
<!-- 关联多对一的配置根据实体类中的属性名指定 -->
<many-to-one name="user" column="u_id"/>
</class>
</hibernate-mapping>
package org.com.core.controller;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.com.core.dao.BaseDao;
import org.com.core.pojo.Address;
import org.com.core.pojo.User;
// 测试类
public class OneToMany extends BaseDao{
public static void main(String[] args) {
selectMany();
}
//插入数据
public static void save(){
getSession();
User u = new User("one", 123);
Address a1 = new Address("1111","heh1");
Address a2 = new Address("2222","heh2");
Address a3 = new Address("3333","heh3");
Address a4 = new Address("4444","heh4");
//将多个地址放入到set中
Set<Address> set = new HashSet<Address>();
set.add(a1);
set.add(a2);
set.add(a3);
set.add(a4);
//用户与地址建立关系
u.setAddress(set);
//地址与用户建立关系
a1.setUser(u);
a2.setUser(u);
a3.setUser(u);
a4.setUser(u);
//开启事务
tx = session.beginTransaction();
//保存数据
session.save(u);
tx.commit();
session.close();
sessionFactory.close();
}
//通过从表查主表
public static void selectOne(){
getSession();
Address address = session.get(Address.class, 8);
System.out.println(address.getUser());
session.close();
sessionFactory.close();
}
//通过主表查从表
public static void selectMany(){
getSession();
User user = session.get(User.class,29);
System.out.println(user);
System.out.println("===================");
Iterator<Address> it = user.getAddress().iterator();
while (it.hasNext()) {
Address a = it.next();
System.out.println(a);
}
session.close();
sessionFactory.close();
}
}