`

hibernate基础知识

阅读更多

Session接口

容易混淆的概念;
save()方法

将一个实例加入到缓存中。并不是在缓存中拷贝一份这个实例。
所以当一个实例由临时对象或者游离对象转为持久化对象后,地址不变。

将任何一个实例转入持久化对象这个过程:
1.将对象的OID赋新值。
2.将对象加入缓存。

merge()方法

当缓存里已有一个对象时,此时将一个游离对象(两者OID相同)update,/;会报错。
必须用merge方法.

update()方法
先决条件,对象不能是已经在缓存中有相同OID的游离对象。否则用merge方法。
<class select-before-update="true/false">属性意义
更新前先select一下,看看哪些属性更新了。没有则不更新。用在不经常变动的类。

在做双向关联时,在session内先做一个一对多关联,此时这只是在缓存做了一对多关联。所以这时想要反查,多对一,则查询不到,除非再做多对一,可以查到。要么就是做完一对多时,关闭session,让数据入库,再打入session查多对一,这时数据出来了。
所以对于session里的操作,大家一定要脑子时刻清楚,这只是对内存操作,而不是数据库。

关联的概念

孙卫琴说的好,关系数据库只有多对一的概念。一对多是多对一的双向关联。
所以必须先 many-to-one,才能 one-to-many。由于在hibernate里,类即是表 的概念,所以关联以实体类做外键。

外键的定义先要弄清楚,百度知道上是这么写的。

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
  外键的作用:
  保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!

 

这段话用hibernate来配置是这样:

 

<one-to-many name>

<key column="从表中的外键字段">

<class name="从表" />

</one-to-many>

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics