在JPA中,如果实体是托管状态,并且是与事务有关,那么就能更新数据库相应的字段值。
这是什么意思?

解决方案 »

  1.   

    也就是说实体对象属于托管状态下时,往这个对象里面的某个属性 set 新的值,这个新的值会被更新到数据表中去。使用 EntityManager#contains(entity) 方法可以得知某个实体对象是否处于托管状态,也就是说是否处于 persistence context 中。使用 EntityManager#clear() 方法可以将处于 persistence context 范围中的托管对象变为游离对象,这时重置属性值不会更新到数据表中去。persistence context 有两种类型。一种称为 transaction-scope persistence context,在这种状态下 persistence context 是与事务相关的,也就是说在事务范围内托管对象所有的更改都会被更新到数据表中去,当事务提交后,这个 persistence context 也就销毁了,之后的更改不会被更新到数据表中去。另一种称为 extended persistence context,在这种状态下 persistence context 并不会因事务提交而销毁,而是可以跨事务的,具体的销毁与客户端请求有关,一般用于 Stateful Session Bean 中。
      

  2.   

    一般使用的 persistence context 都是默认的 transaction-scoped,extended 的很少用到。在 transaction-scoped 环境中,受托管的实体对象并在事务环境中,这时重置属性值更新到数据表中去。如果实体对象为游离对象,也就是说已经从 persistence context 游离出来了,这时重置属性值不会更新到数据表中去,如果需要将游离对象重置的值更新到数据表中去,需要使用 EntityManager#merge(entity) 方法,将该游离对象纳入当前 persistence context 的管辖之中重新成为托管对象。
      

  3.   

    find(order.class)
    查找订单类,算事务吗?
      

  4.   

    在使用的find()方法上面有@Transactional
    是否表示该方法是一个事务?
      

  5.   

    dingdingdingdingdingdingdingdingdingding
      

  6.   

    可以参考 http://www.javaeye.com/topic/641637
    实体托管状态有持久化表示,但是与持久化上下文没有关联,
    这个可以说是实体实例的生命周期 new managed detached remove
      

  7.   

    是脱管还是托管.. 啊 不太清楚啊..受托管的实体对象并在事务环境中”,这里的事务指的是什么?能讲讲吗?谢谢我不会JPA哦 果子大神 他这个 事务环境 是不是就类似HIBERNATE的书上所写的 操作单元 啊