hibernate 常用方法介绍

 更新时间:2013年09月22日 15:05:44   作者:  
这篇文章介绍了hibernate的常用方法,有需要的朋友可以参考一下
一、hibetnateTemplate常用方法

1、delete(Object entity) 删除指定的持久化实例
在程序中一般先用    Assert.notNull和 Assert.isTrue断言entity是否为空 和 entity的id是否大于0若
否则事务回滚。再用get(Class entityClass,Serializable id,LockMode lockMode)加锁查询出持久
化实例,一般用lockMode.update悲观锁,最后用delete(Object entity)来删除此实例。

2、deleteAll(Collection entities) 删除集合内全部持久化实例
entities必须为持久化实例,否则报数据库异常错误。

3、find(String queryString) 根据HQL查询字符串来返回实例集合
find方法在执行时会先查找缓存,如果缓存找不到再查找数据库,如果再找不到就会返回null。

4、get(Class entityClass,Serializable id)根据主键加载特定持久化实例
在程序中一般先用     Assert.isTrue断言id是否大于0,若大于0继续执行,若查到数据则返回实例,否则返回空
不同于load,load若有数据则返回实例,否则报出ObjectNotFoundEcception异常,相比来说get效率高些

5、save(Object entity) 保存新的实例
在程序中一般先用    Assert.notNull断言实体是否为空,在进行保存。

6、saveOrUpdate(Object entity)根据实例的状态选择保存或者是更新
此方法同时包含了save与update方法的功能,如果传入的参数是临时对象vo 没有id,就调用save方法;如果传
入的参数是游离对象有id,就调用update()方法;如果传入的参数是持久化对象po,就直接返回。

7、update(Object entity) 更新实例的状态 实例必须为持久化状态
在程序中一般先用    Assert.notNull和 Assert.isTrue断言entity是否为空 和 entity的id是否大于0,
然后在更新实例,entity必须含有id否则不能更新。

8、Object execute(hibetnateCallback action)是HibernateCallback接口类。
当dao中的方法不能满足程序需要时可以考虑用此方法。如:根据几个不同参数需要返回唯一实体时用uniqueResult()返回。
HibernateCallback里面定义了一个doInHibernate的方法,这个方法是可变的。如果要查找数据方法应该就
是:session.load()。删除数据就是session.delete().这样的话查询数据库的方法用execute方法。

 
9、bulkUpdate()通过语句直接增加、更新、删除实体
一般有bulkUpdate(String sqlString) 和 bulkUpdate(String sqlString,Object[] object)两个
方法,返回增加,更新,或者删除的数量一般用于批量。
 
10、hibernate主键生成策略
 
(1)Assigned: 在插入数据的时候主键由用户自己添加。如:<generator class="assigned"/>
(2)sequence: 调用数据库的sequence来生成主键,要设定序列名,否则hibernate无法找到。
如:<param   name="sequence">ENTTY_NAME_SEQ</param>
(3)increment 插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,
所以在多个实例运行的时候不能使用这个方法。

11、实体对象的三种状态
Session的生命周期绑定在一个物理的事务(tansaction)上面。
Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作
(1)自由状态(transient): 不曾进行持久化,未与任何Session相关联
(2)持久化状态(persistent): 仅与一个Session相关联
持久化实例可以通过调用 delete()变成游离状态。通过get()或load()方法得到的实例都是持久化状态的
(3)游离状态(detached): 已经进行过持久化,但当前未与任何Session相关联
游离状态的实例可以通过调用update(),lock(),replicate(),save(),persist()或者saveOrUpdate()方法进行持久化

相关文章

  • Spring事务管理的使用细则浅析

    Spring事务管理的使用细则浅析

    事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就 回退到事务开始未进行操作的状态。事务管理是Spring框架中最为常用的功能之一,我们在使用Spring开发应用时,大部分情况下也都需要使用事务
    2023-02-02
  • Java  中桥接模式——对象结构型模式的实例详解

    Java 中桥接模式——对象结构型模式的实例详解

    这篇文章主要介绍了Java 中桥接模式——对象结构型模式的实例详解的相关资料,希望通过本文大家能掌握这部分知识,需要的朋友可以参考下
    2017-09-09
  • Java并发编程示例(七):守护线程的创建和运行

    Java并发编程示例(七):守护线程的创建和运行

    这篇文章主要介绍了Java并发编程示例(七):守护线程的创建和运行,在本节示例中,我们将创建两个线程,一个是普通线程,向队列中写入事件,另外一个是守护线程,清除队列中的事件,需要的朋友可以参考下
    2014-12-12
  • Spring Security源码解析之权限访问控制是如何做到的

    Spring Security源码解析之权限访问控制是如何做到的

    Spring Security 中对于权限控制默认已经提供了很多了,但是,一个优秀的框架必须具备良好的扩展性,下面小编给大家介绍Spring Security源码解析之权限访问控制是如何做到的,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • nacos在mac上部署提示找不到或无法加载主类的解决

    nacos在mac上部署提示找不到或无法加载主类的解决

    这篇文章主要介绍了nacos在mac上部署提示找不到或无法加载主类的解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 快速解决springboot在yml配置了启动端口但启动还是8080问题

    快速解决springboot在yml配置了启动端口但启动还是8080问题

    这篇文章主要介绍了快速解决springboot在yml配置了启动端口但启动还是8080问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • javaweb如何使用华为云短信通知公共类调用

    javaweb如何使用华为云短信通知公共类调用

    这篇文章主要介绍了javaweb使用华为云短信通知公共类调用的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Spring AOP利用切面实现日志保存的示例详解

    Spring AOP利用切面实现日志保存的示例详解

    最近领导让写个用切面实现日志保存,经过调研和亲测,以完美解决。在这里分享给大家,给有需要的码友直接使用,希望对大家有所帮助
    2022-11-11
  • SpringBoot Redis清除所有的key的实现方法

    SpringBoot Redis清除所有的key的实现方法

    本文主要介绍了SpringBoot Redis清除所有的key的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • springboot+thymeleaf整合阿里云OOS对象存储图片的实现

    springboot+thymeleaf整合阿里云OOS对象存储图片的实现

    本文主要介绍了springboot+thymeleaf整合阿里云OOS对象存储图片的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05

最新评论