实体bean(十)EJB3.0 QL
1.createQuery()
查找:
Query q=em.createQuery(“select p from Person p where p.name=’persia’ ”);
List rs=q.getResultList();
更新:
Query q=em.createQuery(“update Person p set p.name=?1 where p.personid=?2”);
q.setParameter(1,”persia”);
q.setParameter(2,new Integer(1));
int rs=q.executeUpdate();
删除:
Query q=em.createQuery(“delete from Person”);
int rs=q.executeUpdate();
2.createNativeQuery()
Query q=em.createNativeQuery(“select * from person”,Person.class);
List rs=q.getResultList();
Query q=em.createNativeQuery(“update person set age=age+2”);
q.executeUpdate();
3.刷新实体refresh()
当取出实体后,担心当前的实体已经不是数据库中的最新数据,可以通过refresh()方法刷新实体,容器会把数据库中的新值重新写入实体。
em.refresh(person);//传入的参数必须为实体bean。
4.检查实体当前是否被管理
if(em.contains(person)){
}else{
}
5.分离所有当前正在被管理的实体clear()
把已经处理过的实体从EM中分离出来,以减少内存的消耗。
clear()将所有正在被管理的实体将从持久化内容中分离出来。如果此时事务没有提交,则之前对实体所做的修改将会丢失。
建议clear()之前先调用flush()方法保持更改。
6.将实体的改变立即刷新到数据库中flush()
实体管理器在服务器的事务提交时提交并同步其内容。
为了只在当事务提交时才将改变更新到数据库中,容器将所有数据库操作集中到一个批处理中,以减少代价昂贵的与数据库的交互。
当调用persist(),merge()(将脱离em的实体bean重新返回到受控的实体bean状态---通过拷贝实例,传入的参数仍然不受管理),remove()这些
方法时,更新并不立刻同步到数据库,直到容器决定刷新到数据库中才执行。
默认是在相关查询或事务提交之前更新,也可以用EntityManager.flush()来手工将数据刷新到数据库。
7.通过setFlushMode()改变实体管理器的flush模式
EntityManager.setFlushMode(FlushModeType.COMMIT)
EntityManager.setFlushMode(FlushModeType.AUTO)//比commit需要更多次与数据库交互。
8.通过getDelegate()获取持久化实现者的引用
如HibernateEntityManager hem=(HibernateEntityManager)em.getDelegate();
浙公网安备 33010602011771号