OpenJPA
  1. OpenJPA
  2. OPENJPA-659

No state snapshot is available on @Embedded class when using runtime enhancement via spring-tomcat-weaver

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.1.0
    • Fix Version/s: 1.2.0
    • Component/s: kernel
    • Labels:
      None
    • Environment:
      Tomcat6, Java6, Mac OS X, Spring 2.5

      Description

      i am getting this exception:

      org.springframework.orm.jpa.JpaSystemException: No state snapshot is available for instance of type "de.logentis.bwh.model.Payment", but this instance uses state-comparison for dirty detection.; nested exception is <openjpa-1.1.0-r422266:657916 fatal general error> org.apache.openjpa.persistence.PersistenceException...

      Here are the relevant pieces of the casses:

      @Entity
      @Table(name = "orders")
      @VersionColumn(name = "_version")
      public class Order {
      ...
      @Embedded
      Payment payment;
      }

      @Embeddable
      public class Payment {

      @Basic
      @Enumerated(EnumType.STRING)
      @Column(name = "paymenttype")
      PaymentType type;

      @Column(name = "currency")
      String currency;

      @Column(name = "pricing")
      String pricing;

      @Column(name = "cost")
      int cost;
      }

      The point is, persisting is no problem at all, the exception will be thrown by issueing:

      Query query = getEntityManager().createQuery("select o FROM Order o");
      query.getResultList();

        Activity

        Hide
        Pinaki Poddar added a comment -

        Revision 676727:

        Dirty checking fails for runtime enhanced classes. The original case reported the failure in a Spring-Tomcat-Weaver with Embdded field. But as TestSimpleUnenhancedQuery can raise the same failure in a simpler settings. The fix is related to initializing a SaveFieldManager conditional to having loaded fields at invocation of saveFields(). The fix removes the condition and ensures that a SaveFieldManager is assocaited even when saveFields() is invoked without any field loaded.

        Show
        Pinaki Poddar added a comment - Revision 676727: Dirty checking fails for runtime enhanced classes. The original case reported the failure in a Spring-Tomcat-Weaver with Embdded field. But as TestSimpleUnenhancedQuery can raise the same failure in a simpler settings. The fix is related to initializing a SaveFieldManager conditional to having loaded fields at invocation of saveFields(). The fix removes the condition and ensures that a SaveFieldManager is assocaited even when saveFields() is invoked without any field loaded.
        Hide
        Pinaki Poddar added a comment -

        What is the identity strategy used by Order.class?
        While reproducing the error in JSE environment, I am noticing that the crucial factor is the datastore identity used by a class. Otherwise, the issue does not seem to appear.

        Show
        Pinaki Poddar added a comment - What is the identity strategy used by Order.class? While reproducing the error in JSE environment, I am noticing that the crucial factor is the datastore identity used by a class. Otherwise, the issue does not seem to appear.
        Hide
        Marc Logemann added a comment -

        The problem doesnt occur when relying on build time enhancement via PCEnhancerTask.

        Show
        Marc Logemann added a comment - The problem doesnt occur when relying on build time enhancement via PCEnhancerTask.

          People

          • Assignee:
            Pinaki Poddar
            Reporter:
            Marc Logemann
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development