10月13日hibernate培训日记
2006-10-17 20:51 java ee spring 阅读(122) 评论(0) 编辑 收藏 举报今天还是田老师讲解hibernate,大概内容如下:
hibernate配置文件中的各个配置项详细讲解,配置项也可以通过编码的方式进行设置。
向SessionFactory中加入实体的各种方法:配置和编码方式,编码又有加入文件和加入类方式,加入文件又要区分addResource与addFile的区别。
要持久化的对象应该正确处理equals和hashCode方法,解决的问题:集合中可以出现与同一条记录对应的多个实体对象,保存集合时将出现NonUniqueObjectException异常。通过hibernate在运行中的哪些地方要调用此方法来阐述。
对于Oralce,如果将id生成方式选择为Sequence,Hibernate自动在Oracle中创建Sequence,多个表的id共享同一个sequence,可以通过<Generator>元素的<param>子元素来指定"sequence"的名称。联合主键的有关问题。
Hibernate3提供了动态模型,目前这种功能还不完美。
属性值分为实体类型或值类型。
HQL、QBC、QBE等查询语言的讲解。
Query.list与Query.iterate的比较。
只有在auto-import要设置为true时,才可以在HQL语句的from从句中省略对象的包名。
HQL中的with与fetch关键字,隐式连接。
实体对应并不一定要是表,而可以是一条子查询语句。这是通过在<class>中嵌套<sub-select>来完成的。用一个Map对象来取两个表的联合视图,而这个视图是不支持数据库更新的。在这种情况下,要指定每个<Property>元素的type属性.
increment递增是hibernate先取出数据库中的最大值,然后加1后存储回去,不能解决并发问题。indentity是数据库自增。
学生的学号不要作为主键,因为学号是业务含义的,所以,可以再安排一个无意义的id字段作为主键。
第三范式(3NF)是要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。
在考虑性能的时候,有时候可以不遵循第三范式。例如,要进行迪卡尔乘积查询很慢时,可以另一个表中的数据直接放在第一个表中,从而可以不用关联查询,这样有点冗余也可以。
作业:结合使用Servlet和hibernate,实现一个用户登陆用例的程序。