一:
hibernate中有瞬时态,持久态, 脱管态。
在session中 关闭session后
当不清楚瞬时的还是脱管的时候用sava,Update。瞬时的id没有值,脱管的有值。调用merger后对象还是脱管。
瞬时的 sava ,update , get/load 持久的
delete
hibernate中有瞬时态,持久态, 脱管态。
在session中 关闭session后
当不清楚瞬时的还是脱管的时候用sava,Update。瞬时的id没有值,脱管的有值。调用merger后对象还是脱管。
瞬时的 sava ,update , get/load 持久的
delete
二:HQL与Critera 两者都是查询
查询语句:from Student as student where student.name=?
分页:query.setFirstResult(10)----query.setMaxResults(23)
查询语句:from Student as student where student.name=?
分页:query.setFirstResult(10)----query.setMaxResults(23)
Critera
Criteria c=s.createCriteria(Student.class);
用c.add(Restrictions.eq("name", name))等添加约束
Criteria c=s.createCriteria(Student.class);
用c.add(Restrictions.eq("name", name))等添加约束
都有:List<Student> list=query.list();
Student stu=(Student) query.uniqueResult();
Student stu=(Student) query.uniqueResult();
使用ORM(object Relation Mapping)框架来解决。
开发流程:Domain object ->mapping ->db(官方推荐)
由DB开始,用工具生成mapping和Domain object(使用较多)
开发流程:Domain object ->mapping ->db(官方推荐)
由DB开始,用工具生成mapping和Domain object(使用较多)
三:关联
关联映射
多对一(Employee-Department) 用得最多的
一对多(Department-Employee)
一对一(Person-IdCard)
<
多对多(teacher-student) 当数据多的时候尽量少用
组件映射(User-Name)
聚合映射(set,list,map,bag)
inverse和cascade(Employee-Department)
如果在属性中还有值 映射为:
<component name="">
<property name="" colum=""/>
<property name="" colum=""/>
</component>
四:集合
用set比较多,因为不重复,不按顺序。
list,重复,按顺序。
五:hibernate级联
<set name="" cascade="save-update">
<key column="" />
<one-to-many class=""/>
</set>
级联主键保存了,外键里面的也保存。
all,所有的 save-update 在更新的情况下还有delectable,lock,persist等 dlecte-orphan在一对多情况下
多对多不建议使用级联。
六:属性的作用与原理分析
最好一方控制,可以提高效率
放弃关系维护:set中加inverse="true" 不能在有序的集合里实施!!!只会到集合中出现!!
七:关联继承
class中加diascriminator-value="0"
增加<subclass name="" column="" diascriminator-value="1">
<property name="">
</subclass>
<subclass name="" column="" diascriminator-value="2">
<join column="">
<key column=""/>
<property name=""/>
</join>
</subclass>
第二种:三张表不能有相同的
<union-subclass name="" table="">
<property name=""/>
</union-subclass>
八:懒加载 通过asm.jar cglib.jar两个包实现的
提高效率,尽量推迟连接数据库,直到必须访问。
提高效率,尽量推迟连接数据库,直到必须访问。
one-to-one懒加载问题
满足三个条件:主表不能有constrained=true,lazy!=false主表没有懒加载;constrained=true;fetch=select。
满足三个条件:主表不能有constrained=true,lazy!=false主表没有懒加载;constrained=true;fetch=select。