第三天Hibernate映射
1.单向关联。
只能从单向的一段访问另外一段(只能从一个实体访问另外一个实体)。
A.多对一的单向关联。
只能够从多的实体访问一的实体。在产品表创建实体属性。
private Cate cate;//分类的实体对象
publicCate getCate() {
returncate;
}
publicvoid setCate(Cate cate) {
this.cate= cate;
}
在产品的映射配置文件中:
<many-to-one name="cate"fetch="join" class="Cate"column="cate_id"></many-to-one>
产品表(多) |
分类表(一) |
B.一对多的单向关联。
产品表(多) |
分类表(一) |
从一的实体访问多的实体(集合)。在分类表的对象中添加多的实体属性集合,也就在Cate实体中加入以下代码:
public Set<Product> getProducts() {
returnproducts;
}
publicvoid setProducts(Set<Product> products) {
this.products= products;
}
privateSet<Product> products;
再修改cate的实体映射文件:
<set name="products"table="Product" >
<key column="cate_id"></key><!-- 外键关联的名字 -->
<one-to-many class="Product"/>
</set>
2.双向关联:
两端都能相互访问。在实际开发中均采用的是双向关联。
3.级联关系。
cascade:级联关系,就是如果说两端中的一段数据更新了,是否更新另外另外一端的数据。
cascade:save-update.当其中一端的数据更新了,那么就会影响到另外一端的数据。比如我更新了产品分类表的数据,那么就会自动更新产品表的数据。
4. inverse:控制反转的属性
inverse:true。将控制权交予对方。
inverse:false。将控制权保留起来。
5.fetch:
如果不设定该属性值,默认情况下,如果有关联表,那么关联表会分批次查询。比如查询分类表,以及分类所对应的产品表。那么会进行两次查询。先查询分类的信息,然后得到分类ID,将分类ID传入产品表里进行查询。
fetch:join.就会通过left out join 进行表与表之间的关联,最终会是一条sql语句。