Hibernate高级模块解析

( 奥斯科技首发)本地SQL查询--->>:
Hibernate <wbr>高级模块解析 Hibernate <wbr>高级模块解析 Hibernate <wbr>高级模块解析 Hibernate <wbr>高级模块解析
实现方式:

Criteria ca = session.createCriteria(Stuff.class);
ca.createCriteria("department");
ca.createCriteria("position");
List stuffs = ca.list();
for (Stuff stuff : stuffs) {
System.out.println(stuff.getName());
System.out.println(stuff.getDepartment().getName());
System.out.println(stuff.getPosition().getName());
}
tx.commit();
命名查询--->注解方式:

放置位置级实现:
  * Department entity. @author MyEclipsePersistence Tools
  */
@Entity
@Table(name = "DEPARTMENTS", schema = "LOVESMILE")
//@Cache(usage = CacheConcurrencyStrategy .READ_WRITE)
@NamedQuery(name="sel_dpt_po",query="select distinct dpt fromDepartment as dpt left join fetch dpt.stuffs as s left join fetchs.position")
public class Department implements java.io.Serializable{

在注解实体类添加@NamedQuery(....);

在业务中调用方式:
  Queryquery=session.getNamedQuery("sel_dpt_po");---->参数为@NamedQuery的name值

乐观锁--->注解方式:

private Integer version;

@Version
@Column(name = "VERSION")
public Integer getVersion() {
return version;
}

public void setVersion(Integer version) {
this.version = version;
}
注意:
需要在数据表中添加一个数字类的列作为版本控制,此程序中为version

Criteria 查询:

其他一些知识:

flush时将一级缓存与数据库同步
1.大量操作数据时可能造成内存溢出,解决办法如下:
for(inti=0;i<100000;i++){session.save(obj);
if(i% 50 == 0){session.flush(); session.clear();}
}
2.用StatelessSession接口:它不和一级缓存、二级缓存交互,也不触发任何事件、监听器、拦截器,通过该接口的操作会立刻发送给数据库,与JDBC的功能一样。
StatelessSession s =sessionFactory.openStatelessSession();该接口的方法与Session类似。
3.Query.executeUpdate()执行批量更新,会清除相关联的类二级缓存(sessionFactory.evict(class)),也可能会造成级联,和乐观锁定出现问题
update Department as dpt set dpt.name='部门2'  where dpt.id=2”
4.悲观锁:Criteria.setLockMode,Query.setLockMode,Session.lock 
乐观锁:< version   column = "version "     name = " version "    type = " java.lang.Integer "    /> 

使用list()方法获取查询结果,每次发出一条查询语句,获取全部数据
使用iterate()方法获取查询结果,先发出一条SQL 语句用来查询满足条件数据的id,然后依次按这些id查询记录,也就是要执行N+1 条SQL 语句(N 为符合条件的记录数)
list()方法将不会在缓存中读取数据,它总是一次性的从数据库中直接查询所有符合条件的数据,同时将获取的数据写入缓存
  iterate()方法则是获取了符合条件的数据的id 后,首先根据id在缓存中寻找符合条件的数据,若缓存中无符合条件的数据,再到数据库中查询


---来自微笑风采的博客


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值