Hibernate对象关系映射总结
<class name="Department" table="oneToManyDupDir_Department"
dynamic-insert="true" dynamic-update="true">
<cache usage="read-write"/> <id name="id"> <generator class="native" /> </id> <property name="name"/> <set name="emps" inverse="true" lazy="true" cascade="all"> <key column="depart_id"/> <one-to-many class="Employee" /> </set> </class> </hibernate-mapping>
2:JPA中可不可以配置像Hibernate那样的dynamic-update属性,以实现动态更新, 只更新那些实体类中不为Null的字段
evict():从session缓存里清除某一个对象 clear():从session缓存里清除所有对象
flush():session flush方法主要做两件事:
* 清理缓存 * 执行sql
2.Hibernate里,对象都有三种状态:临时状态,持久状态,脱管状态
临时状态:刚创建出来的对象一般都为临时状态,临时状态的对象的主键是没有值的,如果有值就是脱管
状态。
持久状态:对象处于Hibernate的session范围之内,处于持久状态的对象的属性发生改变都会影响到数据库里
的数据改变。
脱管状态:和临时状态唯一区别就是主键有值:不处于Hibernate的session范围之内
也就是说:在数据库中有与之匹配的数据,但是该对象没有纳入session管理
======================Hibernate中各种查询方法的总结========================
1. 使用HQL语句
Query q = session.createQuery("select e from com.sun.demo.Emp e"); 2. 使用Load方法(主键查询)
Emp e = (Emp)session.load(Emp.class, 1141); 3. 使用get方法(主键查询)
Emp e = (Emp)session.get(Emp.class, 1141);
4. 参数化查询(使用?通配符,或者命令通配符)
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename=?"); q.setParameter(0, "SMITH");
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like ?"); q.setParameter(0, "%M%");
Query q = session.createQuery("update Userinfo set ename='AAA' WHERE ename like :lkename"); q.setParameter("lkename", "%L%"); 5. 命名查询