/* * Copyright 2002-2008 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.orm.hibernate3; import java.lang.reflect.Proxy; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import junit.framework.TestCase; import org.easymock.MockControl; import org.hibernate.Criteria; import org.hibernate.Filter; import org.hibernate.FlushMode; import org.hibernate.HibernateException; import org.hibernate.Interceptor; import org.hibernate.JDBCException; import org.hibernate.LockMode; import org.hibernate.NonUniqueResultException; import org.hibernate.ObjectDeletedException; import org.hibernate.ObjectNotFoundException; import org.hibernate.PersistentObjectException; import org.hibernate.PropertyValueException; import org.hibernate.Query; import org.hibernate.QueryException; import org.hibernate.ReplicationMode; import org.hibernate.SessionFactory; import org.hibernate.StaleObjectStateException; import org.hibernate.StaleStateException; import org.hibernate.TransientObjectException; import org.hibernate.UnresolvableObjectException; import org.hibernate.WrongClassException; import org.hibernate.classic.Session; import org.hibernate.exception.ConstraintViolationException; import org.hibernate.exception.DataException; import org.hibernate.exception.GenericJDBCException; import org.hibernate.exception.JDBCConnectionException; import org.hibernate.exception.LockAcquisitionException; import org.hibernate.exception.SQLGrammarException; import org.springframework.beans.TestBean; import org.springframework.dao.CannotAcquireLockException; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.IncorrectResultSizeDataAccessException; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.dao.InvalidDataAccessResourceUsageException; import org.springframework.transaction.support.TransactionSynchronizationManager; /** * @author Juergen Hoeller * @since 05.03.2005 */ public class HibernateTemplateTests extends TestCase { private MockControl sfControl; private SessionFactory sf; private MockControl sessionControl; private Session session; protected void setUp() { sfControl = MockControl.createControl(SessionFactory.class); sf = (SessionFactory) sfControl.getMock(); sessionControl = MockControl.createControl(Session.class); session = (Session) sessionControl.getMock(); } public void testExecuteWithNewSession() throws HibernateException { sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); assertTrue("Correct allowCreate default", ht.isAllowCreate()); assertTrue("Correct flushMode default", ht.getFlushMode() == HibernateTemplate.FLUSH_AUTO); final List l = new ArrayList(); l.add("test"); List result = ht.executeFind(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); } public void testExecuteWithNewSessionAndFlushNever() throws HibernateException { sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.setFlushMode(FlushMode.NEVER); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setFlushMode(HibernateTemplate.FLUSH_NEVER); final List l = new ArrayList(); l.add("test"); List result = ht.executeFind(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); } public void testExecuteWithNewSessionAndFilter() throws HibernateException { sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.enableFilter("myFilter"); sessionControl.setReturnValue(null, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setFilterName("myFilter"); final List l = new ArrayList(); l.add("test"); List result = ht.executeFind(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); } public void testExecuteWithNewSessionAndFilters() throws HibernateException { sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.enableFilter("myFilter"); sessionControl.setReturnValue(null, 1); session.enableFilter("yourFilter"); sessionControl.setReturnValue(null, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setFilterNames(new String[] {"myFilter", "yourFilter"}); final List l = new ArrayList(); l.add("test"); List result = ht.executeFind(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); } public void testExecuteWithNotAllowCreate() { sf.getCurrentSession(); sfControl.setThrowable(new HibernateException("")); sfControl.replay(); HibernateTemplate ht = new HibernateTemplate(); ht.setSessionFactory(sf); ht.setAllowCreate(false); try { ht.execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return null; } }); fail("Should have thrown DataAccessException"); } catch (DataAccessResourceFailureException ex) { // expected } } public void testExecuteWithNotAllowCreateAndThreadBound() { sf.getCurrentSession(); sfControl.setReturnValue(session); sfControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setAllowCreate(false); final List l = new ArrayList(); l.add("test"); List result = ht.executeFind(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); } public void testExecuteWithThreadBoundAndFlushEager() throws HibernateException { session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.isOpen(); sessionControl.setReturnValue(true, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.flush(); sessionControl.setVoidCallable(1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setFlushModeName("FLUSH_EAGER"); TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); try { final List l = new ArrayList(); l.add("test"); List result = ht.executeFind(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); } finally { TransactionSynchronizationManager.unbindResource(sf); } } public void testExecuteWithThreadBoundAndFilter() { session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.isOpen(); sessionControl.setReturnValue(true, 1); session.enableFilter("myFilter"); sessionControl.setReturnValue(null, 1); session.disableFilter("myFilter"); sessionControl.setVoidCallable(1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setFilterName("myFilter"); TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); try { final List l = new ArrayList(); l.add("test"); List result = ht.executeFind(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); } finally { TransactionSynchronizationManager.unbindResource(sf); } } public void testExecuteWithThreadBoundAndFilters() { session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.isOpen(); sessionControl.setReturnValue(true, 1); session.enableFilter("myFilter"); sessionControl.setReturnValue(null, 1); session.enableFilter("yourFilter"); sessionControl.setReturnValue(null, 1); session.disableFilter("myFilter"); sessionControl.setVoidCallable(1); session.disableFilter("yourFilter"); sessionControl.setVoidCallable(1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setFilterNames(new String[] {"myFilter", "yourFilter"}); TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); try { final List l = new ArrayList(); l.add("test"); List result = ht.executeFind(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); } finally { TransactionSynchronizationManager.unbindResource(sf); } } public void testExecuteWithThreadBoundAndParameterizedFilter() { MockControl filterControl = MockControl.createControl(Filter.class); Filter filter = (Filter) filterControl.getMock(); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.isOpen(); sessionControl.setReturnValue(true, 1); session.getEnabledFilter("myFilter"); sessionControl.setReturnValue(null, 1); session.enableFilter("myFilter"); sessionControl.setReturnValue(filter, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setAllowCreate(false); ht.setFilterName("myFilter"); TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); try { final List l = new ArrayList(); l.add("test"); Filter f = ht.enableFilter("myFilter"); assertTrue("Correct filter", f == filter); } finally { TransactionSynchronizationManager.unbindResource(sf); } } public void testExecuteWithThreadBoundAndParameterizedExistingFilter() { MockControl filterControl = MockControl.createControl(Filter.class); Filter filter = (Filter) filterControl.getMock(); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.isOpen(); sessionControl.setReturnValue(true, 1); session.getEnabledFilter("myFilter"); sessionControl.setReturnValue(filter, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setAllowCreate(false); ht.setFilterName("myFilter"); TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); try { final List l = new ArrayList(); l.add("test"); Filter f = ht.enableFilter("myFilter"); assertTrue("Correct filter", f == filter); } finally { TransactionSynchronizationManager.unbindResource(sf); } } public void testExecuteWithThreadBoundAndNewSession() throws HibernateException { MockControl conControl = MockControl.createControl(Connection.class); Connection con = (Connection) conControl.getMock(); MockControl session2Control = MockControl.createControl(Session.class); Session session2 = (Session) session2Control.getMock(); session2.connection(); session2Control.setReturnValue(con, 1); sf.openSession(con); sfControl.setReturnValue(session, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); session2Control.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setAlwaysUseNewSession(true); TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session2)); try { final List l = new ArrayList(); l.add("test"); List result = ht.executeFind(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); } finally { TransactionSynchronizationManager.unbindResource(sf); } } public void testExecuteWithThreadBoundAndNewSessionAndEntityInterceptor() throws HibernateException { MockControl interceptorControl = MockControl.createControl(org.hibernate.Interceptor.class); Interceptor entityInterceptor = (Interceptor) interceptorControl.getMock(); MockControl conControl = MockControl.createControl(Connection.class); Connection con = (Connection) conControl.getMock(); MockControl session2Control = MockControl.createControl(Session.class); Session session2 = (Session) session2Control.getMock(); session2.connection(); session2Control.setReturnValue(con, 1); sf.openSession(con, entityInterceptor); sfControl.setReturnValue(session, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); session2Control.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setAlwaysUseNewSession(true); ht.setEntityInterceptor(entityInterceptor); TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session2)); try { final List l = new ArrayList(); l.add("test"); List result = ht.executeFind(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); } finally { TransactionSynchronizationManager.unbindResource(sf); } } public void testExecuteWithEntityInterceptor() throws HibernateException { MockControl interceptorControl = MockControl.createControl(org.hibernate.Interceptor.class); Interceptor entityInterceptor = (Interceptor) interceptorControl.getMock(); sf.openSession(entityInterceptor); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setEntityInterceptor(entityInterceptor); final List l = new ArrayList(); l.add("test"); List result = ht.executeFind(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); } public void testExecuteWithCacheQueries() throws HibernateException { MockControl query1Control = MockControl.createControl(Query.class); Query query1 = (Query) query1Control.getMock(); MockControl query2Control = MockControl.createControl(Query.class); Query query2 = (Query) query2Control.getMock(); MockControl criteriaControl = MockControl.createControl(Criteria.class); Criteria criteria = (Criteria) criteriaControl.getMock(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query"); sessionControl.setReturnValue(query1); query1.setCacheable(true); query1Control.setReturnValue(query1, 1); session.getNamedQuery("some query name"); sessionControl.setReturnValue(query2); query2.setCacheable(true); query2Control.setReturnValue(query2, 1); session.createCriteria(TestBean.class); sessionControl.setReturnValue(criteria, 1); criteria.setCacheable(true); criteriaControl.setReturnValue(criteria, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); query1Control.replay(); query2Control.replay(); criteriaControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setCacheQueries(true); ht.execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session sess) throws HibernateException { assertNotSame(session, sess); assertTrue(Proxy.isProxyClass(sess.getClass())); sess.createQuery("some query"); sess.getNamedQuery("some query name"); sess.createCriteria(TestBean.class); // should be ignored sess.close(); return null; } }); query1Control.verify(); query2Control.verify(); criteriaControl.verify(); } public void testExecuteWithCacheQueriesAndCacheRegion() throws HibernateException { MockControl query1Control = MockControl.createControl(Query.class); Query query1 = (Query) query1Control.getMock(); MockControl query2Control = MockControl.createControl(Query.class); Query query2 = (Query) query2Control.getMock(); MockControl criteriaControl = MockControl.createControl(Criteria.class); Criteria criteria = (Criteria) criteriaControl.getMock(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query"); sessionControl.setReturnValue(query1); query1.setCacheable(true); query1Control.setReturnValue(query1, 1); query1.setCacheRegion("myRegion"); query1Control.setReturnValue(query1, 1); session.getNamedQuery("some query name"); sessionControl.setReturnValue(query2); query2.setCacheable(true); query2Control.setReturnValue(query2, 1); query2.setCacheRegion("myRegion"); query2Control.setReturnValue(query2, 1); session.createCriteria(TestBean.class); sessionControl.setReturnValue(criteria, 1); criteria.setCacheable(true); criteriaControl.setReturnValue(criteria, 1); criteria.setCacheRegion("myRegion"); criteriaControl.setReturnValue(criteria, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); query1Control.replay(); query2Control.replay(); criteriaControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setCacheQueries(true); ht.setQueryCacheRegion("myRegion"); ht.execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session sess) throws HibernateException { assertNotSame(session, sess); assertTrue(Proxy.isProxyClass(sess.getClass())); sess.createQuery("some query"); sess.getNamedQuery("some query name"); sess.createCriteria(TestBean.class); // should be ignored sess.close(); return null; } }); query1Control.verify(); query2Control.verify(); criteriaControl.verify(); } public void testExecuteWithCacheQueriesAndCacheRegionAndNativeSession() throws HibernateException { MockControl query1Control = MockControl.createControl(Query.class); Query query1 = (Query) query1Control.getMock(); MockControl query2Control = MockControl.createControl(Query.class); Query query2 = (Query) query2Control.getMock(); MockControl criteriaControl = MockControl.createControl(Criteria.class); Criteria criteria = (Criteria) criteriaControl.getMock(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query"); sessionControl.setReturnValue(query1); session.getNamedQuery("some query name"); sessionControl.setReturnValue(query2); session.createCriteria(TestBean.class); sessionControl.setReturnValue(criteria, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); query1Control.replay(); query2Control.replay(); criteriaControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setExposeNativeSession(true); ht.setCacheQueries(true); ht.setQueryCacheRegion("myRegion"); ht.execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session sess) throws HibernateException { assertSame(session, sess); sess.createQuery("some query"); sess.getNamedQuery("some query name"); sess.createCriteria(TestBean.class); return null; } }); query1Control.verify(); query2Control.verify(); criteriaControl.verify(); } public void testExecuteWithFetchSizeAndMaxResults() throws HibernateException { MockControl query1Control = MockControl.createControl(Query.class); Query query1 = (Query) query1Control.getMock(); MockControl query2Control = MockControl.createControl(Query.class); Query query2 = (Query) query2Control.getMock(); MockControl criteriaControl = MockControl.createControl(Criteria.class); Criteria criteria = (Criteria) criteriaControl.getMock(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query"); sessionControl.setReturnValue(query1); query1.setFetchSize(10); query1Control.setReturnValue(query1, 1); query1.setMaxResults(20); query1Control.setReturnValue(query1, 1); session.getNamedQuery("some query name"); sessionControl.setReturnValue(query2); query2.setFetchSize(10); query2Control.setReturnValue(query2, 1); query2.setMaxResults(20); query2Control.setReturnValue(query2, 1); session.createCriteria(TestBean.class); sessionControl.setReturnValue(criteria, 1); criteria.setFetchSize(10); criteriaControl.setReturnValue(criteria, 1); criteria.setMaxResults(20); criteriaControl.setReturnValue(criteria, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); query1Control.replay(); query2Control.replay(); criteriaControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setFetchSize(10); ht.setMaxResults(20); ht.execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session sess) throws HibernateException { sess.createQuery("some query"); sess.getNamedQuery("some query name"); sess.createCriteria(TestBean.class); return null; } }); query1Control.verify(); query2Control.verify(); criteriaControl.verify(); } public void testGet() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.get(TestBean.class, ""); sessionControl.setReturnValue(tb, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); Object result = ht.get(TestBean.class, ""); assertTrue("Correct result", result == tb); } public void testGetWithLockMode() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.get(TestBean.class, "", LockMode.UPGRADE_NOWAIT); sessionControl.setReturnValue(tb, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); Object result = ht.get(TestBean.class, "", LockMode.UPGRADE_NOWAIT); assertTrue("Correct result", result == tb); } public void testGetWithEntityName() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.get("myEntity", ""); sessionControl.setReturnValue(tb, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); Object result = ht.get("myEntity", ""); assertTrue("Correct result", result == tb); } public void testGetWithEntityNameAndLockMode() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.get("myEntity", "", LockMode.UPGRADE_NOWAIT); sessionControl.setReturnValue(tb, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); Object result = ht.get("myEntity", "", LockMode.UPGRADE_NOWAIT); assertTrue("Correct result", result == tb); } public void testLoad() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.load(TestBean.class, ""); sessionControl.setReturnValue(tb, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); Object result = ht.load(TestBean.class, ""); assertTrue("Correct result", result == tb); } public void testLoadWithNotFound() throws HibernateException { sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.load(TestBean.class, "id"); ObjectNotFoundException onfex = new ObjectNotFoundException("id", TestBean.class.getName()); sessionControl.setThrowable(onfex); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); try { ht.load(TestBean.class, "id"); fail("Should have thrown HibernateObjectRetrievalFailureException"); } catch (HibernateObjectRetrievalFailureException ex) { // expected assertEquals(TestBean.class.getName(), ex.getPersistentClassName()); assertEquals("id", ex.getIdentifier()); assertEquals(onfex, ex.getCause()); } } public void testLoadWithLockMode() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.load(TestBean.class, "", LockMode.UPGRADE); sessionControl.setReturnValue(tb, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); Object result = ht.load(TestBean.class, "", LockMode.UPGRADE); assertTrue("Correct result", result == tb); } public void testLoadWithEntityName() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.load("myEntity", ""); sessionControl.setReturnValue(tb, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); Object result = ht.load("myEntity", ""); assertTrue("Correct result", result == tb); } public void testLoadWithEntityNameLockMode() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.load("myEntity", "", LockMode.UPGRADE); sessionControl.setReturnValue(tb, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); Object result = ht.load("myEntity", "", LockMode.UPGRADE); assertTrue("Correct result", result == tb); } public void testLoadWithObject() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.load(tb, ""); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.load(tb, ""); } public void testLoadAll() throws HibernateException { MockControl criteriaControl = MockControl.createControl(Criteria.class); Criteria criteria = (Criteria) criteriaControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createCriteria(TestBean.class); sessionControl.setReturnValue(criteria, 1); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteriaControl.setReturnValue(criteria); criteria.list(); criteriaControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); criteriaControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.loadAll(TestBean.class); assertTrue("Correct result", result == list); criteriaControl.verify(); } public void testLoadAllWithCacheable() throws HibernateException { MockControl criteriaControl = MockControl.createControl(Criteria.class); Criteria criteria = (Criteria) criteriaControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createCriteria(TestBean.class); sessionControl.setReturnValue(criteria, 1); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteriaControl.setReturnValue(criteria); criteria.setCacheable(true); criteriaControl.setReturnValue(criteria, 1); criteria.list(); criteriaControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); criteriaControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setCacheQueries(true); List result = ht.loadAll(TestBean.class); assertTrue("Correct result", result == list); criteriaControl.verify(); } public void testLoadAllWithCacheableAndCacheRegion() throws HibernateException { MockControl criteriaControl = MockControl.createControl(Criteria.class); Criteria criteria = (Criteria) criteriaControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createCriteria(TestBean.class); sessionControl.setReturnValue(criteria, 1); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteriaControl.setReturnValue(criteria); criteria.setCacheable(true); criteriaControl.setReturnValue(criteria, 1); criteria.setCacheRegion("myCacheRegion"); criteriaControl.setReturnValue(criteria, 1); criteria.list(); criteriaControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); criteriaControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setCacheQueries(true); ht.setQueryCacheRegion("myCacheRegion"); List result = ht.loadAll(TestBean.class); assertTrue("Correct result", result == list); criteriaControl.verify(); } public void testRefresh() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.refresh(tb); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.refresh(tb); } public void testContains() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.contains(tb); sessionControl.setReturnValue(true, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); assertTrue(ht.contains(tb)); } public void testEvict() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.evict(tb); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.evict(tb); } public void testLock() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.lock(tb, LockMode.WRITE); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.lock(tb, LockMode.WRITE); } public void testLockWithEntityName() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.lock("myEntity", tb, LockMode.WRITE); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.lock("myEntity", tb, LockMode.WRITE); } public void testSave() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.save(tb); sessionControl.setReturnValue(new Integer(0), 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); assertEquals("Correct return value", ht.save(tb), new Integer(0)); } public void testSaveWithEntityName() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.save("myEntity", tb); sessionControl.setReturnValue(new Integer(0), 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); assertEquals("Correct return value", ht.save("myEntity", tb), new Integer(0)); } public void testUpdate() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.update(tb); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.update(tb); } public void testUpdateWithLockMode() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.update(tb); sessionControl.setVoidCallable(1); session.lock(tb, LockMode.UPGRADE); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.update(tb, LockMode.UPGRADE); } public void testUpdateWithEntityName() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.update("myEntity", tb); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.update("myEntity", tb); } public void testUpdateWithEntityNameAndLockMode() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.update("myEntity", tb); sessionControl.setVoidCallable(1); session.lock(tb, LockMode.UPGRADE); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.update("myEntity", tb, LockMode.UPGRADE); } public void testSaveOrUpdate() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.saveOrUpdate(tb); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.saveOrUpdate(tb); } public void testSaveOrUpdateWithFlushModeNever() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.NEVER); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); try { ht.saveOrUpdate(tb); fail("Should have thrown InvalidDataAccessApiUsageException"); } catch (InvalidDataAccessApiUsageException ex) { // expected } } public void testSaveOrUpdateWithEntityName() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.saveOrUpdate("myEntity", tb); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.saveOrUpdate("myEntity", tb); } public void testSaveOrUpdateAll() throws HibernateException { TestBean tb1 = new TestBean(); TestBean tb2 = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.saveOrUpdate(tb1); sessionControl.setVoidCallable(1); session.saveOrUpdate(tb2); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List tbs = new ArrayList(); tbs.add(tb1); tbs.add(tb2); ht.saveOrUpdateAll(tbs); } public void testReplicate() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.replicate(tb, ReplicationMode.LATEST_VERSION); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.replicate(tb, ReplicationMode.LATEST_VERSION); } public void testReplicateWithEntityName() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.replicate("myEntity", tb, ReplicationMode.LATEST_VERSION); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.replicate("myEntity", tb, ReplicationMode.LATEST_VERSION); } public void testPersist() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.persist(tb); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.persist(tb); } public void testPersistWithEntityName() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.persist("myEntity", tb); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.persist("myEntity", tb); } public void testMerge() throws HibernateException { TestBean tb = new TestBean(); TestBean tbMerged = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.merge(tb); sessionControl.setReturnValue(tbMerged, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); assertSame(tbMerged, ht.merge(tb)); } public void testMergeWithEntityName() throws HibernateException { TestBean tb = new TestBean(); TestBean tbMerged = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.merge("myEntity", tb); sessionControl.setReturnValue(tbMerged, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); assertSame(tbMerged, ht.merge("myEntity", tb)); } public void testDelete() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.delete(tb); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.delete(tb); } public void testDeleteWithLockMode() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.lock(tb, LockMode.UPGRADE); sessionControl.setVoidCallable(1); session.delete(tb); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.delete(tb, LockMode.UPGRADE); } public void testDeleteWithEntityName() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.delete("myEntity", tb); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.delete("myEntity", tb); } public void testDeleteWithEntityNameAndLockMode() throws HibernateException { TestBean tb = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.lock("myEntity", tb, LockMode.UPGRADE); sessionControl.setVoidCallable(1); session.delete("myEntity", tb); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.delete("myEntity", tb, LockMode.UPGRADE); } public void testDeleteAll() throws HibernateException { TestBean tb1 = new TestBean(); TestBean tb2 = new TestBean(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getFlushMode(); sessionControl.setReturnValue(FlushMode.AUTO); session.delete(tb1); sessionControl.setVoidCallable(1); session.delete(tb2); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List tbs = new ArrayList(); tbs.add(tb1); tbs.add(tb2); ht.deleteAll(tbs); } public void testFlush() throws HibernateException { sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.setFlushMode(FlushMode.NEVER); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setFlushMode(HibernateTemplate.FLUSH_NEVER); ht.flush(); } public void testClear() throws HibernateException { sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.clear(); sessionControl.setVoidCallable(1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.clear(); } public void testFind() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.find("some query string"); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindWithParameter() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.setParameter(0, "myvalue"); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.find("some query string", "myvalue"); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindWithParameters() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.setParameter(0, "myvalue1"); queryControl.setReturnValue(query, 1); query.setParameter(1, new Integer(2)); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.find("some query string", new Object[] {"myvalue1", new Integer(2)}); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindWithNamedParameter() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.setParameter("myparam", "myvalue"); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.findByNamedParam("some query string", "myparam", "myvalue"); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindWithNamedParameters() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.setParameter("myparam1", "myvalue1"); queryControl.setReturnValue(query, 1); query.setParameter("myparam2", new Integer(2)); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.findByNamedParam("some query string", new String[] {"myparam1", "myparam2"}, new Object[] {"myvalue1", new Integer(2)}); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindByValueBean() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); TestBean tb = new TestBean(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.setProperties(tb); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.findByValueBean("some query string", tb); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindByNamedQuery() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getNamedQuery("some query name"); sessionControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.findByNamedQuery("some query name"); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindByNamedQueryWithParameter() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getNamedQuery("some query name"); sessionControl.setReturnValue(query, 1); query.setParameter(0, "myvalue"); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.findByNamedQuery("some query name", "myvalue"); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindByNamedQueryWithParameters() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getNamedQuery("some query name"); sessionControl.setReturnValue(query, 1); query.setParameter(0, "myvalue1"); queryControl.setReturnValue(query, 1); query.setParameter(1, new Integer(2)); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.findByNamedQuery("some query name", new Object[] {"myvalue1", new Integer(2)}); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindByNamedQueryWithNamedParameter() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getNamedQuery("some query name"); sessionControl.setReturnValue(query, 1); query.setParameter("myparam", "myvalue"); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.findByNamedQueryAndNamedParam("some query name", "myparam", "myvalue"); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindByNamedQueryWithNamedParameters() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getNamedQuery("some query name"); sessionControl.setReturnValue(query, 1); query.setParameter("myparam1", "myvalue1"); queryControl.setReturnValue(query, 1); query.setParameter("myparam2", new Integer(2)); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.findByNamedQueryAndNamedParam("some query name", new String[] {"myparam1", "myparam2"}, new Object[] {"myvalue1", new Integer(2)}); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindByNamedQueryAndValueBean() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); TestBean tb = new TestBean(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getNamedQuery("some query name"); sessionControl.setReturnValue(query, 1); query.setProperties(tb); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); List result = ht.findByNamedQueryAndValueBean("some query name", tb); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindWithCacheable() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.setCacheable(true); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setCacheQueries(true); List result = ht.find("some query string"); assertTrue("Correct list", result == list); sfControl.verify(); } public void testFindWithCacheableAndCacheRegion() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.setCacheable(true); queryControl.setReturnValue(query, 1); query.setCacheRegion("myCacheRegion"); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setCacheQueries(true); ht.setQueryCacheRegion("myCacheRegion"); List result = ht.find("some query string"); assertTrue("Correct list", result == list); sfControl.verify(); } public void testFindByNamedQueryWithCacheable() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getNamedQuery("some query name"); sessionControl.setReturnValue(query, 1); query.setCacheable(true); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setCacheQueries(true); List result = ht.findByNamedQuery("some query name"); assertTrue("Correct list", result == list); queryControl.verify(); } public void testFindByNamedQueryWithCacheableAndCacheRegion() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); List list = new ArrayList(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.getNamedQuery("some query name"); sessionControl.setReturnValue(query, 1); query.setCacheable(true); queryControl.setReturnValue(query, 1); query.setCacheRegion("myCacheRegion"); queryControl.setReturnValue(query, 1); query.list(); queryControl.setReturnValue(list, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); ht.setCacheQueries(true); ht.setQueryCacheRegion("myCacheRegion"); List result = ht.findByNamedQuery("some query name"); assertTrue("Correct list", result == list); queryControl.verify(); } public void testIterate() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); Iterator it = Collections.EMPTY_LIST.iterator(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.iterate(); queryControl.setReturnValue(it, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); Iterator result = ht.iterate("some query string"); assertTrue("Correct list", result == it); queryControl.verify(); } public void testIterateWithParameter() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); Iterator it = Collections.EMPTY_LIST.iterator(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.setParameter(0, "myvalue"); queryControl.setReturnValue(query, 1); query.iterate(); queryControl.setReturnValue(it, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); Iterator result = ht.iterate("some query string", "myvalue"); assertTrue("Correct list", result == it); queryControl.verify(); } public void testIterateWithParameters() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); Iterator it = Collections.EMPTY_LIST.iterator(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.setParameter(0, "myvalue1"); queryControl.setReturnValue(query, 1); query.setParameter(1, new Integer(2)); queryControl.setReturnValue(query, 1); query.iterate(); queryControl.setReturnValue(it, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); Iterator result = ht.iterate("some query string", new Object[] {"myvalue1", new Integer(2)}); assertTrue("Correct list", result == it); sfControl.verify(); } public void testBulkUpdate() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.executeUpdate(); queryControl.setReturnValue(5, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); int result = ht.bulkUpdate("some query string"); assertTrue("Correct list", result == 5); queryControl.verify(); } public void testBulkUpdateWithParameter() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.setParameter(0, "myvalue"); queryControl.setReturnValue(query, 1); query.executeUpdate(); queryControl.setReturnValue(5, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); int result = ht.bulkUpdate("some query string", "myvalue"); assertTrue("Correct list", result == 5); queryControl.verify(); } public void testBulkUpdateWithParameters() throws HibernateException { MockControl queryControl = MockControl.createControl(Query.class); Query query = (Query) queryControl.getMock(); sf.openSession(); sfControl.setReturnValue(session, 1); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.createQuery("some query string"); sessionControl.setReturnValue(query, 1); query.setParameter(0, "myvalue1"); queryControl.setReturnValue(query, 1); query.setParameter(1, new Integer(2)); queryControl.setReturnValue(query, 1); query.executeUpdate(); queryControl.setReturnValue(5, 1); session.flush(); sessionControl.setVoidCallable(1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); queryControl.replay(); HibernateTemplate ht = new HibernateTemplate(sf); int result = ht.bulkUpdate("some query string", new Object[] {"myvalue1", new Integer(2)}); assertTrue("Correct list", result == 5); queryControl.verify(); } public void testExceptions() throws HibernateException { SQLException sqlEx = new SQLException("argh", "27"); final JDBCConnectionException jcex = new JDBCConnectionException("mymsg", sqlEx); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw jcex; } }); fail("Should have thrown DataAccessResourceFailureException"); } catch (DataAccessResourceFailureException ex) { // expected assertEquals(jcex, ex.getCause()); assertTrue(ex.getMessage().indexOf("mymsg") != -1); } final SQLGrammarException sgex = new SQLGrammarException("mymsg", sqlEx); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw sgex; } }); fail("Should have thrown InvalidDataAccessResourceUsageException"); } catch (InvalidDataAccessResourceUsageException ex) { // expected assertEquals(sgex, ex.getCause()); assertTrue(ex.getMessage().indexOf("mymsg") != -1); } final LockAcquisitionException laex = new LockAcquisitionException("mymsg", sqlEx); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw laex; } }); fail("Should have thrown CannotAcquireLockException"); } catch (CannotAcquireLockException ex) { // expected assertEquals(laex, ex.getCause()); assertTrue(ex.getMessage().indexOf("mymsg") != -1); } final ConstraintViolationException cvex = new ConstraintViolationException("mymsg", sqlEx, "myconstraint"); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw cvex; } }); fail("Should have thrown DataIntegrityViolationException"); } catch (DataIntegrityViolationException ex) { // expected assertEquals(cvex, ex.getCause()); assertTrue(ex.getMessage().indexOf("mymsg") != -1); } final DataException dex = new DataException("mymsg", sqlEx); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw dex; } }); fail("Should have thrown DataIntegrityViolationException"); } catch (DataIntegrityViolationException ex) { // expected assertEquals(dex, ex.getCause()); assertTrue(ex.getMessage().indexOf("mymsg") != -1); } final JDBCException jdex = new JDBCException("mymsg", sqlEx); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw jdex; } }); fail("Should have thrown HibernateJdbcException"); } catch (HibernateJdbcException ex) { // expected assertEquals(jdex, ex.getCause()); assertTrue(ex.getMessage().indexOf("mymsg") != -1); } final PropertyValueException pvex = new PropertyValueException("mymsg", "myentity", "myproperty"); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw pvex; } }); fail("Should have thrown DataIntegrityViolationException"); } catch (DataIntegrityViolationException ex) { // expected assertEquals(pvex, ex.getCause()); assertTrue(ex.getMessage().indexOf("mymsg") != -1); } try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw new PersistentObjectException(""); } }); fail("Should have thrown InvalidDataAccessApiUsageException"); } catch (InvalidDataAccessApiUsageException ex) { // expected } try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw new TransientObjectException(""); } }); fail("Should have thrown InvalidDataAccessApiUsageException"); } catch (InvalidDataAccessApiUsageException ex) { // expected } final ObjectDeletedException odex = new ObjectDeletedException("msg", "id", TestBean.class.getName()); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw odex; } }); fail("Should have thrown InvalidDataAccessApiUsageException"); } catch (InvalidDataAccessApiUsageException ex) { // expected assertEquals(odex, ex.getCause()); } final QueryException qex = new QueryException("msg"); qex.setQueryString("query"); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw qex; } }); fail("Should have thrown InvalidDataAccessResourceUsageException"); } catch (HibernateQueryException ex) { // expected assertEquals(qex, ex.getCause()); assertEquals("query", ex.getQueryString()); } final UnresolvableObjectException uoex = new UnresolvableObjectException("id", TestBean.class.getName()); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw uoex; } }); fail("Should have thrown HibernateObjectRetrievalFailureException"); } catch (HibernateObjectRetrievalFailureException ex) { // expected assertEquals(TestBean.class.getName(), ex.getPersistentClassName()); assertEquals("id", ex.getIdentifier()); assertEquals(uoex, ex.getCause()); } final ObjectNotFoundException onfe = new ObjectNotFoundException("id", TestBean.class.getName()); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw onfe; } }); fail("Should have thrown HibernateObjectRetrievalFailureException"); } catch (HibernateObjectRetrievalFailureException ex) { // expected assertEquals(TestBean.class.getName(), ex.getPersistentClassName()); assertEquals("id", ex.getIdentifier()); assertEquals(onfe, ex.getCause()); } final WrongClassException wcex = new WrongClassException("msg", "id", TestBean.class.getName()); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw wcex; } }); fail("Should have thrown HibernateObjectRetrievalFailureException"); } catch (HibernateObjectRetrievalFailureException ex) { // expected assertEquals(TestBean.class.getName(), ex.getPersistentClassName()); assertEquals("id", ex.getIdentifier()); assertEquals(wcex, ex.getCause()); } final NonUniqueResultException nuex = new NonUniqueResultException(2); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw nuex; } }); fail("Should have thrown IncorrectResultSizeDataAccessException"); } catch (IncorrectResultSizeDataAccessException ex) { // expected assertEquals(1, ex.getExpectedSize()); assertEquals(-1, ex.getActualSize()); } final StaleObjectStateException sosex = new StaleObjectStateException(TestBean.class.getName(), "id"); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw sosex; } }); fail("Should have thrown HibernateOptimisticLockingFailureException"); } catch (HibernateOptimisticLockingFailureException ex) { // expected assertEquals(TestBean.class.getName(), ex.getPersistentClassName()); assertEquals("id", ex.getIdentifier()); assertEquals(sosex, ex.getCause()); } final StaleStateException ssex = new StaleStateException("msg"); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw ssex; } }); fail("Should have thrown HibernateOptimisticLockingFailureException"); } catch (HibernateOptimisticLockingFailureException ex) { // expected assertNull(ex.getPersistentClassName()); assertNull(ex.getIdentifier()); assertEquals(ssex, ex.getCause()); } final HibernateException hex = new HibernateException("msg"); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw hex; } }); fail("Should have thrown HibernateSystemException"); } catch (HibernateSystemException ex) { // expected assertEquals(hex, ex.getCause()); } } public void testFallbackExceptionTranslation() throws HibernateException { SQLException sqlEx = new SQLException("argh", "27"); final GenericJDBCException gjex = new GenericJDBCException("mymsg", sqlEx); try { createTemplate().execute(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw gjex; } }); fail("Should have thrown DataIntegrityViolationException"); } catch (DataIntegrityViolationException ex) { // expected assertEquals(sqlEx, ex.getCause()); assertTrue(ex.getMessage().indexOf("mymsg") != -1); } } private HibernateTemplate createTemplate() throws HibernateException { sfControl.reset(); sessionControl.reset(); sf.openSession(); sfControl.setReturnValue(session); session.getSessionFactory(); sessionControl.setReturnValue(sf, 1); session.close(); sessionControl.setReturnValue(null, 1); sfControl.replay(); sessionControl.replay(); return new HibernateTemplate(sf); } protected void tearDown() { try { sfControl.verify(); sessionControl.verify(); } catch (IllegalStateException ex) { // ignore: test method didn't call replay } assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); } }