You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by mp...@apache.org on 2007/04/07 01:52:04 UTC

svn commit: r526322 - /incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java

Author: mprudhom
Date: Fri Apr  6 16:52:03 2007
New Revision: 526322

URL: http://svn.apache.org/viewvc?view=rev&rev=526322
Log:
OPENJPA-208 Throw NoResultException and NonUniqueResultException when expected

Modified:
    incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java

Modified: incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java?view=diff&rev=526322&r1=526321&r2=526322
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java Fri Apr  6 16:52:03 2007
@@ -281,14 +281,26 @@
      */
     public Object getSingleResult() {
         _em.assertNotCloseInvoked();
-        // temporarily set query to unique so that a single result is validated
-        // and returned; unset again in case the user executes query again
-        // via getResultList
-        _query.setUnique(true);
+        Object ob = execute();
+        if (!(ob instanceof List))
+            return ob;
+
+        List res = (List) ob;
         try {
-            return execute();
+            // don't use size() b/c can be inefficient under some LRS settings
+            Iterator itr = res.iterator();
+            if (!itr.hasNext())
+                throw new NoResultException(_loc.get("no-results",
+                    _query.getQueryString()).getMessage(), null, null, false);
+
+            Object ret = itr.next();
+            if (itr.hasNext())
+                throw new NonUniqueResultException(_loc.get("mult-results",
+                    _query.getQueryString()).getMessage(), null, null, false);
+
+            return ret;
         } finally {
-            _query.setUnique(false);
+            OpenJPAPersistence.close(res);
         }
     }