gaowenming 发表于 2013-1-26 15:56:11

Hibernate一对多的单向关联

一个商品类别下对应着多个商品,在关联关系里,就是以集合的方式关联,一般是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
商品描述:很好的手机
页: [1]
查看完整版本: Hibernate一对多的单向关联