Hibernate是什么;ORMapping的原理 如何使用sql实现Hibernate中的saveOrUpdate方法
Hibernate是什么ORMapping的原理
Hibernate是轻量级的ORMapping框架。
ORMapping基本规则:
类和表映射。
实例和数据库表中的一条数据映射。
实例的属性和数据库表中的字段映射。
表名和类名可以不一样。
一个类可以映射多个表。
一个表可以映射多个对象。
类的属性字段名可以和数据库里面的字段名不一样。
类的属性字段个数可以和数据库里面的字段个数不一样。
类的属性字段顺序可以和数据库里面的字段顺序不一样。
类的属性字段类型和数据库里面的字段类型不一样,但是要能互相转换。
数据库表里面可以没有主键,但是对象里面一定要设置主键字段。
数据库表之间的关系就映射成为对象之间的关系。
就是把对象里面的数据和数据库里面的数据,按照一定的规则进行映射的过程,就叫ORMappiing。
XXX.cfg.xml
XXX.hbm.xml
如何使用sql实现Hibernate中的saveOrUpdate方法
Session session=getSession()
sql="insert into userRole(userID,roleID) values(?,?)
session.createSQLQuery(sql)
hibernate saveOrUpdate 使用!!!
saveOrUpdate,是根据user是否有主键ID决定使用sava或者update方法,如果是存在的数据就调用update,如果是新数据则调用save方法。如果你的ID是使用的数据库自增的主键机制,就不需要setId,set其他属性即可。
hibernate为什么用了saveOrUpdate该怎么用
session的saveOrUpdate是根据对象的状态(瞬时,持久,托管)对对象进行save或update操作的,我猜楼主肯定是刚刚学习到这一块,因为实际项目中,这个方法用的应该很少(我猜的).
当对象的状态为瞬时状态时,对对象进行save操作
当对象的状态为持久或托管状态时,对对象进行update操作
hibernate中的saveOrUpdate该怎么用
saveOrUpdate是当你一个pojo对象在不确定的情况下使用的,目的在于当这个对象存在的时候就将其状态改变成现在这个状态,如果不存在就使其持久化保存现在这个状态,也就是说不论怎样就是要有这个对象
hibernate中saveOrUpdate的使用场合
1.不是的
api中写的很明确:
save
public Serializable save(Object entity)
throws DataAccessExceptionDescription copied from interface: HibernateOperations
Persist the given transient instance.
Specified by:
save in interface HibernateOperations
Parameters:
entity - the transient instance to persist
Returns:
the generated identifier
Throws:
DataAccessException - in case of Hibernate errors
See Also:
Session.save(Object)
public void saveOrUpdate(Object entity)
throws DataAccessExceptionDescription copied from interface: HibernateOperations
Save or update the given persistent instance, according to its id (matching the configured "unsaved-value"?). Associates the instance with the current Hibernate Session.
Specified by:
saveOrUpdate in interface HibernateOperations
Parameters:
entity - the persistent instance to save or update (to be associated with the Hibernate Session)
Throws:
DataAccessException - in case of Hibernate errors
See Also:
Session.saveOrUpdate(Object)
save是返回插入数据的主见的,而saveOrUpdate是void
save方法更适用与确定了是要插入,而且需要得到插入数据的主键
而saveOrUpdate更倾向于不缺定是插入还是更新,而且你不需要得到他的主键
另一方面,如果你无法确定你要插入或更新的对象是不是持久态或游离态时。如果你save一个持久态或更新一个游离态,这都是有问题的,此时你就要用到saveOrUpdate
总体来说,如果你能确定你即将操作对象的状态,则不需要用saveOrUpdate
2.有存在的必要,而且是很有用处的
hibernate merge和savaorupdate有什么不同
merge是ejb3.0里的方法,和hibernate的saveorupdate是有点区别的,下面说说我对他们的理解:merge和saveOrUpdate方法区别在于:merge方法是把我们提供的对象转变为托管状态的对象;而saveOrUpdate则是把我们提供的对象变成一个持久化对象;说的通俗一点就是:saveOrUpdate后的对象会纳入session的管理,对象的状态会跟数据库同步,再次查询该对象会直接从session中取,merge后的对 象不会纳入session的管理,再次查询该对象还是会从数据库中取。
关于hibernate的saveOrUpdate方法的一个问题
hibernate的一级缓存中,flush是清除缓存,将hibernate快照当中的数据一次性的提交的,hibernate在查询数据的时候,他只会从数据查询一次,然后将数据放到内存当中,当你在set属性时,hibernate会和内存中的做对比,如果只不一样的话,就修改其值, ession.flush清除缓存,清除缓存时就会提交事务~