学习hibernate总结

1.hibernate中的瞬态对象没在缓存中,持久态对象在缓存中有别的地方也有,游离态对象在缓存里没有但在其他地有。关闭后缓存就没有。

2. (1)hibernate中session.load(类名.class,)是类对象的子对象,而session.get却是类对象

   (2)session.load找不会报错,而session.get找不到却返回的是空。
    (3)session.load可以延迟加载在 类的xml中设置 lazy="true"
3.inverse=“true”是把控制权交给多的那方(在一对多时(级联时),如果不是true则修改班级时本班级下的学生表的班级编号会为空),既而一的那方无法通过级联来控制外键了。 inverse=“false”代表不反转。则控制方就在我手里在双向的一对多的一方..hbm.xml中<set>配置.
4.hibernate使用时,不要让序列名与表名相同否者创建不了序列。
5.在hibernate中设置属性值设置为懒加载时,在查询时是不会加载这个字段的,除非你是需要使用的时候。
6.在hibernate中先使用session.get查询再通过session.update修改时,只会提交你修改的内容。
7.hibernate执行的顺序是先添加再修改,如果想改变顺序的话就使用session.flush来刷新这样就可以将之前的先提交。
8.servlet的上下文是pageContext。hibernate中的持久化上下文是session(上下文:指的是可以通过获得api中大部分的东西)
9.this.getServletContext().getRequestDispatcher("").forward(request,response);和request.getServletContext().getRequestDispatcher("").forward(request,response)是一样的可以跳转,但前者跳转范围更大。
10.hibernate中一对多,一方使用集合时(set本来没实例化)。session.update方法不会出现空指针,它会帮助集合对象创建set,但使用session.save时出现空指针因为set没有实例化。
11.hibernate中一对多,在hbm.xml中的<set>标签使用fetch="join"修改抓取策略(就像使用了连接查询)即sql语句是使用几个(只对session方法有效)即session.get方法对createQuery无效,对session.createQuery无效。
12.hibernate中一对多,配置了cascade="all",但不想级联删除。
方法(1)在session.get获取数据之后再用对象设置集合为null,这样就把集合回收了,则就无法再向集合里添加对象了。
方法(2)在session.get获取数据之后再用对象的集合调用clear方法,但集合仍然存在不会被销毁因为我们把它清空了。
13.hibernate中不允许出现两个对象使用同一个set集合,也不允许session的两个方法(不包括get,createQuery)使用一个对象。
14.java中一个类中的方法就只有一个方法体。如是实例方法用类的对象调用这个方法时其实是用了this的引用。则每个类对象调用这个方法时都传递了不同的this
15.org.hibernate.transientObjectException这个异常的解决方法是.hbm.xml中配置cascade=“all”(一对多,多对一,多对多)
16.在多对一中,如果外键是空的话,若使用了一中的属性则报空指针异常。(1)可以在HQL语句中写外键不为空的判断条件(2)也可以写多的别名,再使用别名.成员名.多的那方的属性
17.在双向一对多里面得在两方配置的外键名必须是一样的。
18.一对多中的<set>配置的fetch="join"会导致延迟加载失效仅在用session.get时有效,对session.createQuery无效。
19.在一对多中一方为控制方时,两方同时添加值时先insert语句添加值再用update语句去修改多方的外键的值。而多对一种却没有update语句。
20.在双向一对多中默认是一方为主控方。如修改则将inverse=“true”。
21.sesseion.get是不支持延迟加载的,但session.load是支持延迟加载。
21.一对多中set全都是延迟加载的,不取值就不加载。
22.inverse=“true”会与caseall=“save-update”冲突,在一对多方的<set>中配置了则就不允许修改多的那方的外键了,既而让设置集合为null时就无法让多的那方的外键为空了,从而删除就会出现违反唯一约束。
23.hibernate映射oracle数据库时出现“不许序列化”,则可能是这个表空间里面已经有了同样的表名
24.在一对多中<SET>中的<key>是管理别的表的外键,而在多对多中而是管理中间表的自己的外键。
26.在一对一中如果constainted=true,则会先增加关联表,然后增加本表。 删除的时候反之。
one-to-one的单向关联中,如果constrained=false,则会在查询时就全部取出来,用left outer join的方式。如果constrained=true,hibernate即会延迟加载sql,只把主表的查出来,等有用到关联表的再发sql取。
one-to- one的双向关联中,必须设置constrained=true,要不然会有重复数据
27.org.hibernate.NonUniqueObjectEeception,在修改数据时出现的,可已改成session.update(session.merge(object))。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值