首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

第八章Hibernate照射多对一关联关系

2012-08-22 
第八章Hibernate映射多对一关联关系第八章Hibernate映射多对一关联关系?多对一单向关联????? 1.表与表之间

第八章Hibernate映射多对一关联关系

第八章Hibernate映射多对一关联关系

?多对一单向关联

????? 1.表与表之间的关联可以分成一对一,一对多,多对一和多对多

????? 2.网络商城中,一个大的商品分类下,又多个小的商品分类,一个小的商品分类下,又多个商品

?Product类:

public class Product implements java.io.Serializable {private Integer id;private String name;private Double price;private String decription;public Product() {}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Double getPrice() {return this.price;}public void setPrice(Double price) {this.price = price;}public String getDecription() {return this.decription;}public void setDecription(String decription) {this.decription = decription;}}

?Category类:

public class Category implements java.io.Serializable {private Integer id;private String name;private String description;private Set<Product> products = new HashSet<Product>();public Category() {}public Category(String name, String description) {this.name = name;this.description = description;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public String getDescription() {return this.description;}public void setDescription(String description) {this.description = description;}public Set<Product> getProducts() {return products;}public void setProducts(Set<Product> products) {this.products = products;}}

? ? Category映射配置:

<?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.crazy.Category" table="CATEGORY" schema="SCOTT">        <id name="id" type="java.lang.Integer">            <column name="ID" precision="8" scale="0" />            <generator />        </id>        <property name="name" type="java.lang.String">            <column name="NAME" length="200" />        </property>        <property name="description" type="java.lang.String">            <column name="DESCRIPTION" length="4000" />        </property>    <set name="products"><key column="category_id"></key><one-to-many name="code"><?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.crazy.Product" table="PRODUCT" schema="SCOTT">        <id name="id" type="java.lang.Integer">            <column name="ID" precision="8" scale="0" />            <generator />        </id>        <property name="name" type="java.lang.String">            <column name="NAME" length="200" />        </property>        <property name="price" type="java.lang.Double">            <column name="PRICE" precision="6" />        </property>        <property name="decription" type="java.lang.String">            <column name="DECRIPTION" length="2000" />        </property>    </class></hibernate-mapping>
?一对多单向关联

????? Product与Category是多对一的关系,Product对象维护着Category对象的参考,如果由Category对象维护着多个Product对象的管理,就是一对多单向关联。

Product类:

public class Product implements java.io.Serializable {private static final long serialVersionUID = 1L;private Integer id;private String name;private Double price;private String decription;private Category category;public Product() {}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Double getPrice() {return this.price;}public void setPrice(Double price) {this.price = price;}public String getDecription() {return this.decription;}public void setDecription(String decription) {this.decription = decription;}public Category getCategory() {return category;}public void setCategory(Category category) {this.category = category;}}

? Category类:

public class Category implements java.io.Serializable {private static final long serialVersionUID = 1L;private Integer id;private String name;private String description;private Set<Product> products = new HashSet<Product>();public Set<Product> getProducts() {return products;}public void setProducts(Set<Product> products) {this.products = products;}public Category() {}public Category(String name, String description) {this.name = name;this.description = description;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public String getDescription() {return this.description;}public void setDescription(String description) {this.description = description;}}
?

?Category映射配置:

<?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.crazy.Category" table="CATEGORY" schema="SCOTT">        <id name="id" type="java.lang.Integer">            <column name="ID" precision="8" scale="0" />            <generator />        </id>        <property name="name" type="java.lang.String">            <column name="NAME" length="200" />        </property>        <property name="description" type="java.lang.String">            <column name="DESCRIPTION" length="4000" />        </property>                <set name="products">        <key column="category_id"></key><one-to-many name="code"><?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.crazy.Product" table="PRODUCT" schema="SCOTT">        <id name="id" type="java.lang.Integer">            <column name="ID" precision="8" scale="0" />            <generator />        </id>        <property name="name" type="java.lang.String">            <column name="NAME" length="200" />        </property>        <property name="price" type="java.lang.Double">            <column name="PRICE" precision="6" />        </property>        <property name="decription" type="java.lang.String">            <column name="DECRIPTION" length="2000" />        </property>    </class></hibernate-mapping>?
?级联(cascade)

?????? 主动方对执行操作时,被关联对象(被动方)是否同步执行同一操作。

<set name="products" cascade="save-update">        <key column="category_id"></key><one-to-many name="code">public class Category implements java.io.Serializable {private Integer id;private String name;private String description;private Set<Product> products = new HashSet<Product>();public Category() {}public Category(String name, String description, Set<Product> products) {this.name = name;this.description = description;this.products = products;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public String getDescription() {return this.description;}public void setDescription(String description) {this.description = description;}public Set<Product> getProducts() {return this.products;}public void setProducts(Set<Product> products) {this.products = products;}}

? Category映射配置:

?

<?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.crazy.Category" table="CATEGORY" schema="SCOTT">        <id name="id" type="java.lang.Integer">            <column name="ID" precision="8" scale="0" />            <generator />        </id>        <property name="name" type="java.lang.String">            <column name="NAME" length="200" />        </property>        <property name="description" type="java.lang.String">            <column name="DESCRIPTION" length="4000" />        </property>        <set name="products" inverse="true" cascade="save-update">            <key>                <column name="CATEGORY_ID" precision="8" scale="0" />            </key>            <one-to-many />        </set>    </class></hibernate-mapping>

? Product类:

public class Product implements java.io.Serializable {private Integer id;private Category category;private String name;private Double price;private String decription;public Product() {}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public Category getCategory() {return this.category;}public void setCategory(Category category) {this.category = category;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Double getPrice() {return this.price;}public void setPrice(Double price) {this.price = price;}public String getDecription() {return this.decription;}public void setDecription(String decription) {this.decription = decription;}}

??? Product映射配置:

?

<?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.crazy.Product" table="PRODUCT" schema="SCOTT">        <id name="id" type="java.lang.Integer">            <column name="ID" precision="8" scale="0" />            <generator />        </id>        <property name="name" type="java.lang.String">            <column name="NAME" length="200" />        </property>        <property name="price" type="java.lang.Double">            <column name="PRICE" precision="6" />        </property>        <property name="decription" type="java.lang.String">            <column name="DECRIPTION" length="2000" />        </property>                 <many-to-one name="category" outer-join="true">            <column name="CATEGORY_ID" precision="8" scale="0" />        </many-to-one>    </class></hibernate-mapping>

? 在类的表现上是,我中有你,你中有我。

控制反转(Inverse)

????? 在Hibernate中的一对多的单向或者多向关联的情况下,我们可以将"一"方控制权交给"多"方,称为控制反转。

  <set name="products" inverse="true">            <key>                <column name="CATEGORY_ID" precision="8" scale="0" />            </key>            <one-to-many /></set>
?

?

热点排行