我对hibernate的理解:
Hibernate把关系数据库中的表与面向对象编程中的对象建立了映射关系,这样,我们在操作数据库关系型数据库的时候,就不用在写那些jdbc的语句了,因为hibernate已经封装了这些,我们只需要建立hibernate配置文件和映射文件就可以了,当然,建立与数据库中表对应的类是必须的,这也是建立映射关系的前提。hibernate是一种面向对象的编程思想,建立了数据库表与对象的映射后,我们就可以操作对象的方法来实现数据库表的管理了。
hibernate实战经验总结:
遇到的问题:hibernate中用update()方法更新对象属性时,抛出异常
报异常:
21:24:25,718 ERROR AbstractBatcher:61 - Exception executing batch:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
问题原因:在从数据库中获得对象时,得到的对象不是一个persistent(持久态的)对象,而是一个detached(游离态的)对象。是detached对象为什么就会出现这个问题呢?因为我们更新的是与数据库表对应的对象,而不是像以前一样直接更新数据库表,然而,只有在更新persistent对象时,hibernate才会知道,hibernate才会去替我们完成数据库的更新。
在Hibernate要获得持久态对象有多种方法:
(1)用session的get(Class clazz, Serializable id)方法
(2)用session的load(Class clazz, Serializable id)方法;
等,还有其他方法。
注意:不要用普通的查询方法去查出你要更新的对象,要用hibernate给我们提供的方法来获得persistent对象。