Hibernate备忘笔记

一个持久化类需要遵循四条主要的规则:
1:实现一个默认的即无参数的构造方法(为了通过反射机制来实例化这个类对象);
2:提供一个标识属性(主键),(可选);
3:使用非final的类(可选);
4:为持久化字段声明访问器和是否可变的标志(可选)

持久化字段不需要声明问public的,hibernate可以持久化一个有default、protected、private的get/set方法对的属性进行持久化

如果有如下需求,则必须重载equals()和hashCode()方法
1:想把持久类的实例放如Set中(当表示多值关联时,推荐这样做)
2:想重用托管实例
建议使用业务键值相等来实现equals()和hashCode()。对选择业务键来说,不可变或唯一的属性是不错的选择

hibernate仅对那些持久化对象赋标识值,一个新创建的实例将不会有任何标识值

映射文档是按照持久化类的定义来创建的,而非表的定义

当映射文件中没有column attribute属性的时候,hibernate缺省地使用属性名作为字段名

一个Session代表一个单线程的单元操作,SessionFactory则是个线程安全的全局对象,只需要被实例化一次。SessionFactory可以创建并打开新的Session。

创建SessionFactory:
 SessionFactory sessionFactory;
 sessionFactory = new Configuration().configure().buildSessionFactory();

如果在配置文件中给SessionFactory一个名字,在SessionFactory创建后,Hibernate会试着把他绑定到JNDI

当事务结束的时候,不管是提交还是回滚,Hibernate会自动把Session从当前的线程剥离,并且关闭它

假设在A表映射文件中定义一个到B表的多对多关联,对于多对多的关联,需要在<set>里定义<many-to-many>元素,需要一个关联表,表里面的每一行代表从A表到B表的一个关联,表名是由set元素的table属性配置的,关联表里面的标识符字段名,对A表的一端,是由<key>元素定义的,而B表一端的字段名是由<many-to-many>元素的column属性定义,在<many-to-many>元素中还需要定义关联的另一端(B表)所对应的类,具体如下所示:
<set name="AtoB" table="A_B">
 <key column="A_ID"/>
 <many-to-many column="B_ID" class="package.B"/>
<set>

把一个双向关联的一端设置为inverse将告诉Hibernate忽略关联的这一端,把这端看成是另外一端的一个镜象,所有的双向关联都需要有一端被设置为inverse,在一对多的关联中它必须是代表多的那端,而在多对多的关联中,你可以任意选取一端

sessions.openSession() 会从连接池获得一个JDBC连接

只要没有hibernate.connection.pool_size属性在配置文件中,就关闭了Hibernate自带的连接池

Hibernate可以持久化一个有default、protected或private的get/set方法对的属性进行持久化

映射文档是按照持久化类的定义来创建的,而非表的定义

 

Hibernate Session设计是非线程安全的,一个Session实例同时只可由一个线程使用

Query和Criteria是Hibernate的数据查询接口,提供了对查询条件的查询机制,Query面向HQL和Native SQL,而Criteria则提供了面向对象的查询模式。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值