OpenJPA
  1. OpenJPA
  2. OPENJPA-1903

Some queries only work the first time they are executed

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.0.1
    • Fix Version/s: 2.2.0
    • Component/s: query
    • Labels:
      None

      Description

      I have a problem in my application where a query that sometimes returns data and sometimes not.

      I have reduced it to the code as much as I could into an Eclipse project available at http://ubuntuone.com/p/S9n/

      This happens with OpenJPA 2.0.1 as well as the daily snapshot from 2010-12-05 and an out-of-process Derby database.

      Basically I have two Entities which both use multiple Ids to produce the Primary Key, "Preis" contains a foreign key on "Website":

      @Entity
      @IdClass(MandantAndNameIdentity.class)
      public class Website

      { @Id private String mandant; @Id private String name; ... }

      @Entity
      @IdClass(WebsiteProduktDatumIdentity.class)
      public class Preis

      { @Id @ManyToOne(cascade = CascadeType.MERGE) private Website website; @Id @Basic private String datum; ... }

      I use the following to set up a website and a Preis:

      em.getTransaction().begin();

      Website website = em.merge(new Website("Mandant", "Website"));

      em.merge(new Preis(website, DATUM));

      em.getTransaction().commit();

      Afterwards, if I run the query as follows:

      TypedQuery<Preis> q = em.createQuery(
      "select m from Preis m " +
      "where m.website.name = :website ", Preis.class);
      q.setParameter("website", website.getName());

      this query works all the time, note that it uses website.name for matching, not the full Website-object.

      However if I put the query as

      TypedQuery<Preis> q = em.createQuery(
      "select m from Preis m " +
      "where m.website = :website ", Preis.class);
      q.setParameter("website", website);

      it only works ONCE and then does not return any results any more!! See testcase DataAccessVerifyTest for details.

      Discussion on the mailinglist seems to indicate that this is a bug.

        Issue Links

          Activity

          Hide
          Dominik Stadler added a comment -

          setting a query-hint to disable caching makes the query run correctly multiple times:

          q.setHint(QueryHints.HINT_IGNORE_PREPARED_QUERY, queryString);

          Show
          Dominik Stadler added a comment - setting a query-hint to disable caching makes the query run correctly multiple times: q.setHint(QueryHints.HINT_IGNORE_PREPARED_QUERY, queryString);
          Hide
          Dominik Stadler added a comment -

          OPENJPA-1750 discusses a similar issue, but the issue here is not fixed by using latest 2.1.0 snapshot builds.

          Show
          Dominik Stadler added a comment - OPENJPA-1750 discusses a similar issue, but the issue here is not fixed by using latest 2.1.0 snapshot builds.
          Hide
          Pinaki Poddar added a comment -

          If your environment permits, try recent SVN commit r1043221 [1] on trunk.
          If it does not, will suggest alternative, non-kosher way to test if the proposed change resolves the reported probiem.
          It is a bug.

          [1] http://openjpa.208410.n2.nabble.com/svn-commit-r1043221-openjpa-trunk-openjpa-jdbc-src-main-java-org-apache-openjpa-jdbc-kernel-Prepareda-td5813517.html

          Show
          Pinaki Poddar added a comment - If your environment permits, try recent SVN commit r1043221 [1] on trunk. If it does not, will suggest alternative, non-kosher way to test if the proposed change resolves the reported probiem. It is a bug. [1] http://openjpa.208410.n2.nabble.com/svn-commit-r1043221-openjpa-trunk-openjpa-jdbc-src-main-java-org-apache-openjpa-jdbc-kernel-Prepareda-td5813517.html
          Hide
          Dominik Stadler added a comment - - edited

          I tried todays snapshot build labeled openjpa-2.2.0-20101209.084750-4.jar but my standalone testcase still fails with the same error.

          I also tried to check out the source and add a testcase to the exsiting TestQueryCache testcase. Strangely there it works, although I use the same settings in the Entities and the same test-code! What could be the difference here? I see the following warning when running TestQueryCache, which might be related but which I cannot make much sense of:

          "Query "select m from Child m where m.parent = :parent " is removed from cache excluded permanently. Query "select m from Child m where m.parent = :parent " is not cached because its result is not obtained by executing a select statement. This can happen if the query was evaluated in-memory. The result was provided by org.apache.openjpa.datacache.QueryCacheStoreQuery$CachingResultObjectProvider. ."

          Show
          Dominik Stadler added a comment - - edited I tried todays snapshot build labeled openjpa-2.2.0-20101209.084750-4.jar but my standalone testcase still fails with the same error. I also tried to check out the source and add a testcase to the exsiting TestQueryCache testcase. Strangely there it works, although I use the same settings in the Entities and the same test-code! What could be the difference here? I see the following warning when running TestQueryCache, which might be related but which I cannot make much sense of: "Query "select m from Child m where m.parent = :parent " is removed from cache excluded permanently. Query "select m from Child m where m.parent = :parent " is not cached because its result is not obtained by executing a select statement. This can happen if the query was evaluated in-memory. The result was provided by org.apache.openjpa.datacache.QueryCacheStoreQuery$CachingResultObjectProvider. ."
          Hide
          Albert Lee added a comment -

          Confirmed with Pinaki, this issues is completed and can be closed.

          Show
          Albert Lee added a comment - Confirmed with Pinaki, this issues is completed and can be closed.

            People

            • Assignee:
              Pinaki Poddar
              Reporter:
              Dominik Stadler
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development