初学hibernate的一点心得
2008-07-24 19:40
169 查看
hibernate多表操作中的多对多学习:
以下列代码为例:[/b][/b]<set name="sources" lazy="true" cascade="save-update"
table="s_stu" catalog="mydb" schema="dbo">
<key column="stu_id" />
<many-to-many column="s_id"
class="web.hibernate.mtm.Source">
</many-to-many>
</set>
在这里,<set></set>中name属性对应的是pojo类中的set元素的名称,lazy为表示是否延时加载,cascade表示级联属性,table属性是连接两个多对多数据库表的中间表。在这里要注意的是,要加上catalog属性和schema属性,用来知名数据库表的完整名称,否则在往中间表中插入数据的时候会出现找不到数据库表的异常。
<key>中的column属性是指当前hbm.xml文件对应的表中的主键字段(注意:这里是对应的数据库中的字段,而不是pojo类中的属性)。
<many-to-many>中的column属性是指要对应的那个表中的主键字段(注意:这里是对应的数据库中的字段,而不是pojo类中的属性)。Class属性对应的是set中存储的数据类型(注意:要写完整类名,否则插入时会有异常)。
需要了解的是inverse属性,在inverse=false方掌握主动权,也就是比如:
Student s1 = new Student();
s1.setStuName("张飞");
Source c1 = new Source();
c1.setSName("语文");
s1.getSources().add(c1);
s.save(s1);
这里c1.getStudents().add(s1)这句可有可无。因为主动权掌握在student手中,两张表的关系由student来维护。
Hibernate多表操作中的一对一学习:
在一对一的映射关系中,主要要注意的是<one-to-one>属性的设置。下面列出其中主要的属性:<one-to-one name="user" class="TUser" lazy="false"
constrained="true">
</one-to-one>
其中name属性对应的pojo类中所写的要映射的那个类的字段名称。Class为要映射的pojo类的类名称。Lazy属性为设置是立即加载还是延时加载。Constrained为设置约束条件,即引用了T_user表中的主键作为T_passport的外键。
<one-to-one name="passport" class="web.hibernate.oto.TPassport"
cascade="all" fetch="select">
这个中的cascade属性为级联约束,fetch是查询方式,select为左外连接查询,join为内连接查询。Cascade=all表示当对当前的User对象进行增加、删除和修改时,都会级联的增加、删除修改Passport对象
Hibernate多表操作中的一对多学习:。
这里需要注意的是:<many-to-one>中具有的column属性,column属性总是和关联类的主键相对应。还要重复的是inverse属性,谁的inverse=false,谁就掌握维护二者关系的主动权。
相关文章推荐
- 关于jsp,struts和hibernate的连用的一点心得(初学篇)
- 在WebSphere Portal Server中使用Hibernate的一点心得
- 初学Hibernate心得体会
- hdu1199 初学离散化的一点心得
- 关于hibernate对视图的操作的一点心得
- 关于hibernate中@Transient注解使用的一点心得
- 初学xsl应用的一点心得
- 初学Oracle的一点心得
- hibernate映射视图的一点心得,奇妙!
- 关于hibernate的一点心得
- 初学VHDL的一点心得。。。。
- 运营电影网站的一点个人心得
- [转]关于支付宝API开发的一点心得
- 关于CBitmap的一点心得
- MySQL安全问题(匿名用户)的一点心得
- [leetcode]解决Climbing Stairs的一点小心得
- Unity5的AssetBundle的一点使用心得
- 关于初学网页制作的心得
- 关于 Quaternion 的一点心得
- 学习整合hibernate springmvc spring的 心得(1)