Hibernate注意事项

hibernate注意事项:

1、SQLQuery如果没有添加addEntry(Student.class)会将一行记录封装为对象数组,再添加到list集合,添加addEntry(Student.class),会将一行记录封装为指定的对象类型

2、本地sql查询不能跨数据库平台,一般不推荐使用,除非必须使用

3、Hibernate中setParameter()参数索引从0开始

4、 一般不使用配置文档自动建表

5、一般一个映射文件映射一个对象

6、普通字段映射property,如果不指定column(表的字段名称)默认与对象属性一致

7、普通字段映射property,length指定字符的长度,默认为255只有字符串类型有

8、普通字段映射property,type指定表字段的类型,如果不指定会匹配属性的类型

9、Type指定Java类型,必须写全名,java.lang.String,

10、Type指定hibernate类型,直接写类型,都是小写

11、Type建议使用java类型

12、Set集合映射的element的type属性一定要指定

13、List集合映射需要增加一个列保证list集合的顺序(<list-index></list-index>)

14、Array数据映射与list集合映射一样(<array></array>)

15、在Hibernate中如果想将一个对象映射成一个外键字段只能many-to-one

16、Inverse属性只在一对多的一的一方起作用

17、多对多保存数据的时候只能通过一方维护另外一方不能重复维护

18、处于持久化状态的对象一定会放入session缓存

19、session缓存由Hibernate维护,用户不能操作缓存内容,只能通过Hibernate提供的evit/clear/flush方法

20、session.getTransaction().commit();相当于session.flush()

21、session不能共享缓冲区

22、session关闭后不能使用懒加载的数据

23、集合属性,默认使用懒加载,一般手动使用lazy=”extra”

24、存在继承关系的对象,查询父类的时候必须写类的全名

25、一对一的鉴别器字段discriminator只能放在id字段映射之下

26、子类没有指定鉴别器字段的名称,默认使用类的全名

27、Select count(*) from t_dept; --统计总记录

28、Select count(1) from t_dept; --统计总记录,效率更高

29、Select count(deptName) from t_dept; --忽略NULL值【聚合函数统计都会忽略NULL值】

30、上述语句在Hibernate中只能写count(*)

31、使用fetch, 会把右表的查询到的对象数据,填充到左表对象中!

32、在配置文档中配置HQL语句的时候遇到特殊符号要转义,一般情况下我们可以使用<![CDATA[内容体]]>语句块

33、Hibernate的二级缓存默认没有开启

34、二级缓存配置缓存类的时候要写类的全路径<class-cache usage="read-write" class="cn.lfsenior.b_second_cache.Dept"/>

35、如果开启了二级缓存则持久化对象会在一级缓存中有,在二级缓存中也有

36、开启集合缓存的集合对象也要加入二级缓存

37、二级、集合缓存配置可以在*.hbm.xml文件也可以在*.cfg.xml中配置,一般推荐使用后者,便于统一维护

38、开启查询缓存后查询的list()可以从二级缓存中拿数据(list()不能从一级缓存[session缓存]中拿数据),但是不主动去拿,需要设置setCacheable(true)

Query q = session1.createQuery("from Dept").setCacheable(true);

System.out.println(q.list());

39、二级缓存缓存的是条件,并不是完整的数据核心是Map<条件,对象>如果条件不一致是无法识别到缓存的对象的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值