hibernate关联关系,openSessionInView,对比JDBC和hibernate

1、Emp   many-to-one  多个人员对应一个部门集合

2、${emp.dept.dname}直接写这个如果是懒加载就会报错,如果你不懒加载

3、在dept里加入了set,需要给一个get、set方法,而且在配置文件里注意名字要给对

4、'hibernate.dialect' must be set when no Connection avalable

5、object垃圾回收期调用final

6、gc是单独一个线程,抢占CPU,第一次执行,空对象打上标记,回收,

7、今天讲了一个新的系统,顾客、商品、订单

8、动态建表

9、openSession和getSession,我是在过滤器里得到list的,所以要先open一下

10、emp对dept是多对一,加入dept对别的节点是一对多,中间的就是中转表,

11、对于EMP来说,每个emp都会对应一个dept,所以每新建一个emp都有一个dept,

 订单和产品是多对多的关系,顾客、

12、Ctrl+Shift+C  为添加注释

13、数据表没有指定数据类型,只能是放2^32位数字,但是oracle中可以放38位,所以要用BigDecimal不能用Integer

14、buildSessionFactory()方法上面划了一横线,是依赖包的版本太高了,要用低一点版本的(究竟是哪一个包值得考究)

15、@WebFilter(urlPatterns="/*")系统自动生成的/webfilter不行

16、.hbm.xml要写到主配置文件的mapping上

17、many- to -one没有cascade="save-update"这个属性,set里面有

18、varStatus  c:forEach里,请注意

19、java.lang.IllegalArgumentException: argument type mismatch

20、迭代器是一个接口还是一个集合?

21、配置文件中的set写key的列名是自己在别人表中的列名

22、

Query的两个方法,list() 和 iterate() , 两个方法都是把结果集列出来, 他们有3点不一样,
1:返回的类型不一样,list()返回List, iterate()返回Iterator,
2: 获取数据的方式不一样,list()会直接查数据库, iterate()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这样如果缓存中没有数据,则查询数据库的次数为n+1。


3:iterate会查询2级缓存, list只会查询一级缓存。
4: list()中返回的List中每个对象都是原本的对象, iterate()中返回的对象是代理对象.(debug可以发现)

23、set的参数:inverse="true"  

24、oracle上用到的,precision="10" 表示有效位数是10位,scale="0" 表示小数位为0

25、

fetch 和 lazy 配置用于数据的查询
lazy 参数值常见有 false 和 true,Hibernate3 映射文件中默认lazy = true ;
fetch 指定了关联对象抓取的方式,参数值常见是select和join,默认是select, select方式先查询主对象,再根据关联外键,每一个对象发一个select查询,获取关联的对象,形成了n+1次查询;而join方式,是left outer join查询,主对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。
在映射文件中,不同的组合会使用不同的查询:
1、lazy=true fetch = select ,使用延迟策略,开始只查询出主对象,关联对象不会查询,只有当用到的时候才会发出sql语句去查询 ;
2、lazy=false fetch = select ,没有用延迟策略,同时查询出主对象和关联对象,产生1+n条sql.
3、lazy=true或lazy=false fetch = join,延迟都不会作用,因为采用的是外连接查询,同时把主对象和关联对象都查询出来了.
配置还是缺乏灵活性的,开发中常会有不同的需求,所以在配置中选择默认值,在具体业务中来指定策略。再者对数据库的操作都是使用SQL来执行的,掌握了sql执行性能反过来看这些配置也许很容易了。

26、ehcache-core-2.4.3.jar、hibernate-ehcache-4.1.4.Final.jar,这两个包用来实现hibernate缓存的

缓存怎么使用:

hibernate核心配置文件加配置项

27、不常用的东西放到缓存里,iterator会用二级缓存,list()是一级缓存

 

27、sessionfactory中的session只是连接数据库的,要用http的session来存储对象

28、

posted @ 2017-04-12 20:28  孜然风味  阅读(148)  评论(0)    收藏  举报