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();
	}
}
相關文章
相關標籤/搜索