go4it

just do it

实体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();

posted on 2009-01-18 20:56  cxccbv  阅读(529)  评论(0)    收藏  举报

导航