六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 48|回复: 0

Hibernate一对多的单向关联

[复制链接]

升级  93.33%

54

主题

54

主题

54

主题

秀才

Rank: 2

积分
190
 楼主| 发表于 2013-1-26 15:56:11 | 显示全部楼层 |阅读模式
一个商品类别下对应着多个商品,在关联关系里,就是以集合的方式关联,一般是Set集合
package com.pojo;import java.util.HashSet;import java.util.Set;/** *  * 商品类别 */public class Category implements java.io.Serializable {private static final long serialVersionUID = 4772491895582904188L;private int id;private String name;private String mark;    private Set<Product> product = new HashSet<Product>() ;  //一个商品类别有多个商品,存放在set里面public Category() {}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public String getMark() {return this.mark;}public void setMark(String mark) {this.mark = mark;}public Set<Product> getProduct() {return product;}public void setProduct(Set<Product> product) {this.product = product;}}
package com.pojo;/** *  *  * 商品 */public class Product implements java.io.Serializable {private static final long serialVersionUID = -4090151482387518292L;private int id;private String productname;private String remark;public Product() {}public String getProductname() {return this.productname;}public void setProductname(String productname) {this.productname = productname;}public String getRemark() {return this.remark;}public void setRemark(String remark) {this.remark = remark;}public int getId() {return id;}public void setId(int id) {this.id = id;}}
在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"><!--     Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>    <class name="com.pojo.Category" table="CATEGORY" schema="ZM">        <id name="id" type="java.lang.Integer">            <column name="ID" precision="8" scale="0" />            <generator class="increment" />        </id>        <property name="name" type="java.lang.String">            <column name="NAME" length="100" />        </property>        <property name="mark" type="java.lang.String">            <column name="MARK" length="100" />        </property>                <!-- 一对多关联,一种类别对应多个商品  -->        <set name="product"  >        <key column="PRODUCTTYPEID" foreign-key="id"></key>        <one-to-many class="com.pojo.Product" />        </set>                    </class></hibernate-mapping>
测试类:
package com.test;import java.util.Set;import org.hibernate.Session;import com.pojo.Category;import com.pojo.Product;import com.util.HibernateManager;public class Test1 {/** * beckham Dec 14, 2009 7:30:06 PM */public static void main(String[] args) {Test1.loadPro() ;}public static void addType() {Session session = HibernateManager.openSession();Category c = new Category();c.setName("电脑");c.setMark("这是电脑类别");try {session.save(c);HibernateManager.closeSession();} catch (Exception e) {e.printStackTrace();HibernateManager.rollbackTransaction();}}public static void addPro() {Session session = HibernateManager.openSession();//获取类型Category c = (Category) session.load(Category.class, new Integer(1));//商品1Product p = new Product();p.setProductname("摩托罗拉v8");p.setRemark("很好的手机");//商品2Product p1 = new Product();p1.setProductname("摩托罗拉A1200");p1.setRemark("非常好的手机");//一对多关联Set<Product> set = c.getProduct() ;set.add(p) ;set.add(p1) ;session.save(p) ;session.save(p1) ;try {session.save(p);HibernateManager.closeSession();} catch (Exception e) {e.printStackTrace();HibernateManager.rollbackTransaction();}}public static void loadPro() {Session session = HibernateManager.openSession();//先获取类型Category c = (Category) session.load(Category.class, new Integer(1));System.out.println("类别编号:"+c.getId());System.out.println("类别名称:"+c.getName());System.out.println("类别描述:"+c.getMark());//获取该类型下的所有商品Set<Product> ps = c.getProduct() ;for(Product p:ps){System.out.println("商品编号"+p.getId());System.out.println("商品名称:"+p.getProductname());System.out.println("商品描述:"+p.getRemark());}try {HibernateManager.closeSession();} catch (Exception e) {e.printStackTrace();HibernateManager.rollbackTransaction();}}}
测试结果:
类别编号:1
Hibernate:
select
category0_.ID as ID1_0_,
category0_.NAME as NAME1_0_,
category0_.MARK as MARK1_0_
from
ZM.CATEGORY category0_
where
category0_.ID=?
类别名称:电脑
类别描述:这是电脑类别
Hibernate:
select
product0_.PRODUCTTYPEID as PRODUCTT4_1_,
product0_.ID as ID1_,
product0_.ID as ID0_0_,
product0_.PRODUCTNAME as PRODUCTN2_0_0_,
product0_.REMARK as REMARK0_0_
from
ZM.PRODUCT product0_
where
product0_.PRODUCTTYPEID=?
商品编号3
商品名称:摩托罗拉A1200
商品描述:非常好的手机
商品编号2
商品名称:摩托罗拉v8
商品描述:很好的手机
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表