hibernate的一对多的关系配置

//实体类关系是一个用户对应多个地址

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();
	}
}
相关文章
相关标签/搜索