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();
	}
}

 

转载于:https://my.oschina.net/u/2310996/blog/686584

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值