读书人

Hibernate中一对多的双向联系关系

发布时间: 2012-10-08 19:54:56 作者: rapoo

Hibernate中一对多的双向关联

在这里我直接就说hibernate的一对多的双向关联,对于一对多的单项关联和多对一的单项关联几乎就没用到,在项目中也很少使用。

?

首先有两张关联的表,类别表Category和展品表Product,一个类别对应多种展品,

?

category字段有 id(主键),name

?

product字段有 id(主键) name,price,c_id(这个就是外键)

?

在Category类中

?

??? private Integer id;
??? private String name;
??? private Set<Product> products=new HashSet();//注意这里不要只写private Set<Product> products,不然后面会出现问题的,因为在取集合的时候回返回null,这样是不行的

?

定义好属性后再分别生成对于的get/set方法

?

在Product类中

??? private Integer id;
??? private String name;
??? private Double price;
??? private Category category;

?

再分别生成对对应的get/set方法

?

在设置相应的.hbm.xml文件

?

在Category.hbm.xml文件中

?

<hibernate-mapping>
??? <class name="com.cheng.entry.Category" table="category">
??? ??? <id name="id" type="java.lang.Integer">
??? ??? ??? <column name="id"></column>
??? ??? ??? <generator type="java.lang.String">
??? ??? ??? <column name="name" length="255"></column>
??? ??? </property>
??? ??? <set name="products(这个表示的就是Category类中的Set集合)">
??? ??? ??? <key column="c_id(这个说明的就是在表product中的外键)"></key>
??? ??? ??? <one-to-many table="product">
??? ??? <id name="id" type="java.lang.Integer">
??? ??? ??? <column name="id"></column>
??? ??? ??? <generator type="java.lang.String">
??? ??? ??? <column name="name" length="200"></column>
??? ??? </property>
??? ??? <property name="price" type="java.lang.Double">
??? ??? ??? <column name="price" ></column>
??? ??? </property>
??? ??? <many-to-one name="category(这个就是在Product类中定义的)" cascade="save-update">
??? ??? ??? <key column="p_id(这个说明的就是在表product中的外键)"></key>
??? ??? ??? <one-to-many class="com.cheng.entry.Product(说明所在的类)"/>
??? ??? </set>

?

表示的级联,意思就是说主动方执行操作时,被关联的对象(被动方)是否要同步执行同一操作(在一对多的关联中,一般都是一方是主动方)

cascade有四个值:

none:什么也不做

save-update:一方进行添加和更新时(这个经常用)

all:所以操作

delete:

delete-orphan:

?

在一方中可以设置反转inverse="true"

控制反转,在一对多中让多方变为主动对象

?

?

?

?

读书人网 >编程

热点推荐