diff options
author | Martin Taal | 2010-11-07 11:07:15 +0000 |
---|---|---|
committer | Martin Taal | 2010-11-07 11:07:15 +0000 |
commit | 29b01655cedf6d3b20477586c69719b9eeb998f2 (patch) | |
tree | 8b3ea7af882052ec3a7e8ec2fde4abeafcc487fb /plugins/org.eclipse.emf.cdo.tests.hibernate | |
parent | ee0cc1b3160d11999631594393cfe487c6541162 (diff) | |
download | cdo-29b01655cedf6d3b20477586c69719b9eeb998f2.tar.gz cdo-29b01655cedf6d3b20477586c69719b9eeb998f2.tar.xz cdo-29b01655cedf6d3b20477586c69719b9eeb998f2.zip |
Fixes issue [310989] - [Hibernate] No hibernate session exception when loading collection, collection loaded to late in hibernate server side flow
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests.hibernate')
3 files changed, 61 insertions, 1 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java b/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java index 60392c35bd..5330c8738a 100644 --- a/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java +++ b/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java @@ -62,7 +62,8 @@ public class AllTestsHibernate extends AllConfigs // if (true) // { // testClasses.clear(); - // testClasses.add(SetFeatureTest.class); + // testClasses.add(HibernateQueryTest.class); + // testClasses.add(HibernateQueryNoCachingTest.class); // return; // } @@ -120,6 +121,7 @@ public class AllTestsHibernate extends AllConfigs // add the hibernate query test testClasses.add(HibernateQueryTest.class); + testClasses.add(HibernateQueryNoCachingTest.class); // override a testcase because the hibernate store // has a different meaning of unset diff --git a/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryNoCachingTest.java b/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryNoCachingTest.java new file mode 100644 index 0000000000..b4da55aa67 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryNoCachingTest.java @@ -0,0 +1,29 @@ +/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateQueryHandler;
+import org.eclipse.emf.cdo.view.CDOQuery;
+
+/**
+ * Test HQL queries with server side caching of query list to off.
+ *
+ * @author Martin Taal
+ */
+public class HibernateQueryNoCachingTest extends HibernateQueryTest
+{
+ @Override
+ protected void addCacheParameter(CDOQuery query)
+ {
+ query.setParameter(HibernateQueryHandler.CACHE_RESULTS, "false");
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryTest.java b/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryTest.java index 591b13e80d..72d6ad70f7 100644 --- a/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryTest.java +++ b/plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryTest.java @@ -56,13 +56,20 @@ public class HibernateQueryTest extends AbstractCDOTest createTestSet(session); + session.close(); + session = openSession(); msg("Opening transaction for querying"); CDOTransaction transaction = session.openTransaction(); + clearCache(getRepository().getRevisionManager()); + { msg("Query for products"); CDOQuery cdoQuery = transaction.createQuery("hql", "from Product1"); + addCacheParameter(cdoQuery); final List<Product1> products = cdoQuery.getResult(Product1.class); + assertTrue(products.get(0).getOrderDetails().size() > 0); + assertTrue(products.get(0).getOrderDetails().get(0).getOrder() != null); assertEquals(NUM_OF_PRODUCTS, products.size()); } @@ -70,20 +77,27 @@ public class HibernateQueryTest extends AbstractCDOTest msg("Query for products with a specific name"); CDOQuery cdoQuery = transaction.createQuery("hql", "from Product1 where name=:name"); cdoQuery.setParameter("name", "" + 1); + addCacheParameter(cdoQuery); final List<Product1> products = cdoQuery.getResult(Product1.class); assertEquals(1, products.size()); } + clearCache(getRepository().getRevisionManager()); + { msg("Query for Customers"); CDOQuery cdoQuery = transaction.createQuery("hql", "from Customer"); + addCacheParameter(cdoQuery); final List<Customer> customers = cdoQuery.getResult(Customer.class); + assertTrue(customers.get(0).getSalesOrders().size() > 0); + assertEquals(NUM_OF_CUSTOMERS, customers.size()); } { msg("Query for products with VAT15"); CDOQuery cdoQuery = transaction.createQuery("hql", "from Product1 where vat=:vat"); + addCacheParameter(cdoQuery); cdoQuery.setParameter("vat", VAT.VAT15); final List<Product1> products = cdoQuery.getResult(Product1.class); assertEquals(10, products.size()); @@ -110,6 +124,7 @@ public class HibernateQueryTest extends AbstractCDOTest { msg("Count products"); CDOQuery cdoQuery = transaction.createQuery("hql", "select count(*) from Product1"); + addCacheParameter(cdoQuery); final List<Long> counts = cdoQuery.getResult(Long.class); assertEquals(counts.size(), 1); assertEquals(counts.get(0), new Long(NUM_OF_PRODUCTS)); @@ -122,6 +137,7 @@ public class HibernateQueryTest extends AbstractCDOTest // "select so.id, sum(od.price) from SalesOrder so, OrderDetail od where od.order=so group by so.id"); CDOQuery cdoQuery = transaction.createQuery("hql", "select sum(od.price) from SalesOrder so, OrderDetail od where od.order=so group by so.id"); + addCacheParameter(cdoQuery); final List<Double> results = cdoQuery.getResult(Double.class); assertEquals(NUM_OF_SALES_ORDERS * NUM_OF_CUSTOMERS, results.size()); } @@ -143,11 +159,13 @@ public class HibernateQueryTest extends AbstractCDOTest { msg("Query for customers"); CDOQuery customerQuery = transaction.createQuery("hql", "from Customer order by name"); + addCacheParameter(customerQuery); final List<Customer> customers = customerQuery.getResult(Customer.class); assertEquals(NUM_OF_CUSTOMERS, customers.size()); msg("Query for products"); CDOQuery productQuery = transaction.createQuery("hql", "from Product1"); + addCacheParameter(productQuery); final List<Product1> products = productQuery.getResult(Product1.class); assertEquals(NUM_OF_PRODUCTS, products.size()); @@ -171,6 +189,7 @@ public class HibernateQueryTest extends AbstractCDOTest "select so from SalesOrder so, OrderDetail od where so.customer=:customer and od in elements(so.orderDetails) and od.product=:product"); orderQuery.setParameter("customer", customer); orderQuery.setParameter("product", product); + addCacheParameter(orderQuery); final boolean hasOrders = productCounter <= productIndex && productIndex < productCounter + NUM_OF_PRODUCTS_CUSTOMER; @@ -218,6 +237,7 @@ public class HibernateQueryTest extends AbstractCDOTest { msg("Query for customers"); CDOQuery odQuery = transaction.createQuery("hql", "from OrderDetail"); + addCacheParameter(odQuery); final List<OrderDetail> orderDetails = odQuery.getResult(OrderDetail.class); for (OrderDetail orderDetail : orderDetails) { @@ -249,6 +269,7 @@ public class HibernateQueryTest extends AbstractCDOTest { msg("Query for customers"); CDOQuery odQuery = transaction.createQuery("hql", "from Customer"); + addCacheParameter(odQuery); final List<Customer> customers = odQuery.getResult(Customer.class); for (Customer customer : customers) { @@ -285,6 +306,7 @@ public class HibernateQueryTest extends AbstractCDOTest CDOQuery query = transaction.createQuery("hql", "select od, od.order, od.product.vat, od.price from OrderDetail as od where od.product.vat=:vat"); query.setParameter("vat", VAT.VAT15); + addCacheParameter(query); for (Object[] values : query.getResult(Object[].class)) { assertInstanceOf(OrderDetail.class, values[0]); @@ -321,6 +343,7 @@ public class HibernateQueryTest extends AbstractCDOTest CDOQuery productQuery = transaction.createQuery("hql", "from Product1"); productQuery.setMaxResults(pageSize); productQuery.setParameter(HibernateQueryHandler.FIRST_RESULT, page * pageSize); + addCacheParameter(productQuery); final List<Product1> queriedProducts = productQuery.getResult(Product1.class); assertTrue(queriedProducts.size() <= pageSize); // a product should not have been read yet @@ -352,6 +375,7 @@ public class HibernateQueryTest extends AbstractCDOTest { msg("Query for products"); CDOQuery productQuery = transaction.createQuery("hql", "from Product1"); + addCacheParameter(productQuery); final CloseableIterator<Product1> iterator = productQuery.getResultAsync(Product1.class); int counter = 0; while (iterator.hasNext()) @@ -466,4 +490,9 @@ public class HibernateQueryTest extends AbstractCDOTest return product; } + + protected void addCacheParameter(CDOQuery query) + { + query.setParameter(HibernateQueryHandler.CACHE_RESULTS, "true"); + } } |