hibernate学习笔记(部分)

来源:互联网 发布:开ktv 知乎 编辑:程序博客网 时间:2024/04/28 16:24

哈哈 人生第一篇博文。

一下笔记为个人的hibernate学习理解,有错误之处不吝指正。


一、Hibernate

a) 在hibernate里,一张表至少对应一个实体类

b) 一张表可以对应多个类

二、Id生成

a) Tablegenerator

i. name:该表主键生成策略的名字,即@GeneratorValue中generator的值

ii. table:持久化的表名

iii. catalog:schema指明所在的目录名或数据库名

iv. pkColumnName:属性的值表示在持久化表中,该主键生成策略所对应键值的名字

v. valueColumnValue:主键生成时要用到的值,每次用完累加

vi. pkColumnValue:该生成策略所用到的记录的名字

vii. initialValue:表示主键初值

viii. allocationSize:表示每次主键增加的大小,默认为50

三、Annotation

a) 注解要么写在字段上,要么写在getter上,两种方法不能混用

四、Entity(初学容易犯错)

a) javax.persistence.Entity声明一个类对应一个实体

b) org.hibernate.annotation.Entity是前者的一个补充,但不是代替,没有声明实体类的功能

c) 如果要使用org.hibernate.annotation.Entity的补充功能,即使已经引入了包,还要写上注释,比如@org.hibernate.annotation.Entity(dynamicUpdate=true)(其实既然这样,也就没必要引入org.hibernate.annotation包了)。至于为啥引入包了还要写注释也很好理解,因为不写注释,编译器没法分别那个Entity属于哪个包。

一、Configuration 

a) 用来管理hibernate.cfg.xml

b) 其configure()方法读取配置信息生成封装了配置信息的Configuration实例

二、SessionFactory

a) 管理连接池

b) 根据Configuration实例构建

c) 构建SessionFactory要放在静态代码块里,因为它只在该类被加载时执行一次

d) 是线程安全的

e) 一个应用一个SessionFactory

三、Session

a) 是Connection的一层高级封装,一个session对应一个Connection

b) 是实现延迟加载所必须的,而且需要保证是同一个Session

c) 管理数据库增删改查的操作(管理一个数据库任务单元)

四、对象三态

a) (Transient)没有id(内存中一个对象,缓存中没有)

b) (Persistent)id在数据库里(内存中有,缓存中有,数据库有(记录))

c) (Detached)id在内存里有(内存有,缓存没有,数据库有(记录)脱离Session管理)

五、动态代理(待看)(作业)

六、Update

a) @Column(updatable=false)注释的属性永远不参加更新

b) 用@org.hibernate.annotations.Entity(dynamicpdate=true)注释的类中的属性是可以实现按需更新的

七、Mappedby

a) 声明外键已被对方关联

b) 实际应用中,双关联必设mappedby

八、关联

a) 双向

i. 双向实际应用中必设mappedBy

ii. 双向在存储时要设手动双向关联,否则容易出错

b) 单向

i. 设定cascade(管存储和更新,fetch管读取)时,hibernate在存储时会自动存储相关的对象,不必手动存储

九、多态映射

a) 用table_per_class时,用多态去fetch数据时,要进行表的联合,效率低下