Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Taal2010-11-07 11:07:15 +0000
committerMartin Taal2010-11-07 11:07:15 +0000
commit29b01655cedf6d3b20477586c69719b9eeb998f2 (patch)
tree8b3ea7af882052ec3a7e8ec2fde4abeafcc487fb /plugins/org.eclipse.emf.cdo.tests.hibernate
parentee0cc1b3160d11999631594393cfe487c6541162 (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryNoCachingTest.java29
-rw-r--r--plugins/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryTest.java29
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");
+ }
}

Back to the top