您的位置:首页 > 其它

初学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,谁就掌握维护二者关系的主动权。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: