hibernate笔记

懒加载分属性懒加载(如load方法),关联懒加载
Hibernate.initialize() and Hibernate.isInitialized() 强制初始化集合与代理对象

hibernate查询方式
sql Query(SQLQuery) = session.createSQLQuery(sql) (不会自动关联)
hql Query = session.createQuery(hql) (自动关联)
Criteria Criteria = session.createCriteria(clazz) (自动关联)

关联时,如果要关联的对象不存在,会报错
可在关联的get方法下设置
@NotFound(action = NotFoundAction.IGNORE)


在hibernate上
@oneToOne, @ManyToOne, @OneToMany 这些注解上可以设置
fetch = FetchType.LAZY
但是如果在这些注解上在加上
@NotFound(action = NotFoundAction.IGNORE)
则懒加载失效, 会变成立即加载. (在程序中会带来很可怕的效应). 产生n+1查询.
所以要使用fetch = FetchType.LAZY时, 要把 @NotFound给去掉

@Formula与sql映射实体冲突,sql语句映射实体类时会报空指针异常


立即关联查询会有重复记录
criteria重复记录
criteria.setResultTransformer(DistinctRootEntityResultTransformer.INSTANCE)

懒加载
会有1+n条sql语句查询

 

无状态session,对数据增删改都会立即执行,不存在对session执行flush的问题。

打开session不会立马连接数据库

@DynamicUpdate动态更新,用于同一个seesion中。

merge方法
调用merge方法的时候,hibernate会检查在持久化上下文中的持久化实例是否和脱管实例具有相同的标识符。如果有,把脱管实例的状态负责到持久化实例中;如果没有,就从数据库中加载,然后把脱管实例和获取的对象状态合并;如果数据库中没有查到结果,就创建新的持久化实例,把脱管实例的状态复制到新实例,插入到数据库中,并通过merge()操作返回。

not-null property references a null or transient value 错误原因:model中nullable设置与数据库表不一致

自关联映射,双向关联映射,实体转json会报循环错误 ,懒加载,springmvc自转json报错

session中不能有主键id相同的对象
hibernate报错a different object with the same identifier value was already associated with the session

object references an unsaved transient instance - save the transient instance before flushing  对象主键要有值

通过id查询如果id为null会报如下错误:

id to load is required for loading

关联查询:外键为null不会报错,不为null且关联表中没相应的id则会报错

 

 

 

posted @ 2017-11-20 10:41  陈秋白  阅读(209)  评论(0编辑  收藏  举报