您的位置:首页 > 数据库

hibernate 延迟加载 二级缓存 注解配置问题

2013-07-05 10:33 411 查看
Hibernate 延迟加载:如果不延迟加载时,系统在加载(load,get)一个对象时,与它所管理的实体或者集合都是立即加载出来放在内存中,这样的话,就会影响到系统的性能,如果运用延迟加载,就不会立即加载有关的实体或者集合,等到要用它这些关联的实体或对象时才会去加载

 

Hibernate 二级缓存 查询缓存:一般来说一级缓存是放在session中,如果去load一个对象,(使用缓存)如果此时session关闭(使用hibernateTemplate的话在执行hql语句后事务提交后就关闭)的话,去对其load出来的实体的非id属性时,就会报错,lazy no session:(缓存关闭问题,再去读就报错)

比如session.createQuery(“from user”).list();后台执行一条hql语句,然后再去load(User.class,1)(或load(User.class,1))的话,后台不会执行hql语句,因为它去缓存中读取了, 不是去数据库。查询缓存,他是一个类似map集合,把查询的hql为key,返回的对象是value,如果执行相同的hql语句,不用到数据库找,直接去缓存中

 

 

一个系统结合延迟加载 和缓存的话,会给数据库减少负担,性能会好很多

加载一个对象,其关联的实体或集合不用立即加载,等到运用时才加载,而且加载(缓存中有数据)时是去缓存中加载,这样就减少了去数据库读取

 

 

 

Hibernate Annotation:

1: Hibernate inverse

在Hibernateannotation 中inverse默认值是"true" 当配置了mappedBy="…"时就相当于inverse="false"了。

 

2关于mappedBy的含义:

a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;

b) mappedBy标签一定是定义在theowned side(被拥有方的),他指向the owning side(拥有方);

c) mappedBy的含义,应该理解为,拥有方能够自动维护跟被拥有方的关系;

如下图:






MappedBy=”sunit”----sunit属性的对象为主动方既unit是被动方

@JoinColumn(name=”unit_id”),这里的unit_id不用与代码对应,这里是表现在数据库的外键unit_id

 

@ManyToMany多对多






mappedBy=”cource”指向的course的类为主控方,所以@JoinTable写在主控方类中,joinColumns={@JoinColumn(name=””)}这句放的是当前类的id,即Teacher的id,inverseJoinColumns={@JoinColumn(name=””)}放的是被控方的id

 

外键问题:

一方的主键,放在多方当外键(主控方包含的表包含外键)

一对多:多的为主控方,表包含外键

一对一:主控方,表包含外键

 

 

 

 

 

注解:二级缓存

如果使用使用hibernate annoation是使用@Cache(usage=CacheConcurrencyStrategy.)标签,有5种可选的缓存方案:

  1,CacheConcurrencyStrategy.NONE

  不适用,默认

  2.  CacheConcurrencyStrategy.NONSTRICT_READ_WRITE

  更新不频繁几个小时或更长

  3,CacheConcurrencyStrategy.READ_ONLY

  对于不发生改变的数据使用 [size=large][/size]

4,CacheConcurrencyStrategy.READ_WRITE

  基于时间戳判定机制,,对于数据同步要求严格的情况,使用频繁

  5,CacheConcurrencyStrategy.TRANSACTIONAL

  运行在jta环境种,基于事务

 

 

 

级联关系:     
(级联关系代码写在主控方)


cascade属性的作用是描述关联对象进行操作时的级联特性。因此,只有涉及到关系的元素才有cascade属性。

具 有cascade属性的标记包括<many-to-one/> <one-to-one /> <any /> <set /><bag /> <idbag/> <list /> <array />
注意:<ont-to-many />和 <many-to-many />是用在集合标记内部的,所以是不需要cascade属性的。
级联操作:指当主控方执行某项操作时,是否要对被关联方也执行相同的操作。
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息