I am trying HibernateInterceptor and HibernateTemplate. HibernateTemplate works like a charm. No luck with HibernateInterceptor though. Here is my spring config file:
Here is the hibernate.properties file:Code:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>org.hsqldb.jdbcDriver</value> </property> <property name="url"> <value>jdbc:hsqldb:data/projectx</value> </property> <property name="username"> <value>sa</value> </property> <property name="password"> <value> </value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource" /> </property> <property name="mappingResources"> <value>projectx.hbm.xml</value> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">net.sf.hibernate.dialect.HSQLDialect</prop> </props> </property> </bean> <bean id="myHibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="userDAOTarget" class="com.projectx.dao.UserDAOHibernateInterceptorImpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="userDAO" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>com.projectx.dao.UserDAO</value> </property> <property name="interceptorNames"> <list> <value>myHibernateInterceptor</value> <value>userDAOTarget</value> </list> </property> </bean> </beans>
Here is the error that I get:Code:hibernate.dialect=net.sf.hibernate.dialect.HSQLDialect hibernate.connection.driver_class=org.hsqldb.jdbcDriver hibernate.connection.url=jdbc:hsqldb:data/projectx hibernate.connection.username=sa hibernate.connection.password=
Code:18:57:20,009 INFO Environment:469 - Hibernate 2.1.6 18:57:20,069 INFO Environment:503 - loaded properties from resource hibernate.properties: {hibernate.connection.username=sa, hibernate.connection.password=, hibernate.cglib.use_reflection_optimizer=true, hibernate.dialect=net.sf.hibernate.dialect.HSQLDialect, hibernate.connection.url=jdbc:hsqldb:data/projectx, hibernate.connection.driver_class=org.hsqldb.jdbcDriver} 18:57:20,079 INFO Environment:529 - using CGLIB reflection optimizer 18:57:20,439 INFO Binder:229 - Mapping class: com.projectx.model.User -> user 18:57:20,620 INFO Configuration:627 - processing one-to-many association mappings 18:57:20,620 INFO Configuration:636 - processing one-to-one association property references 18:57:20,620 INFO Configuration:661 - processing foreign key constraints 18:57:20,670 INFO Dialect:82 - Using dialect: net.sf.hibernate.dialect.HSQLDialect 18:57:20,680 INFO SettingsFactory:63 - Use outer join fetching: true 18:57:20,690 INFO ConnectionProviderFactory:53 - Initializing connection provider: org.springframework.orm.hibernate.LocalDataSourceConnectionProvider 18:57:20,700 INFO TransactionManagerLookupFactory:33 - No TransactionManagerLookup configured (in JTA environment, use of process level read-write cache is not recommended) 18:57:21,561 WARN JDBCExceptionReporter:38 - SQL Error: -33, SQLState: S1000 18:57:21,561 ERROR JDBCExceptionReporter:46 - Access is denied 18:57:21,581 WARN SettingsFactory:96 - Could not obtain connection metadata java.sql.SQLException: Access is denied at org.hsqldb.jdbc.jdbcUtil.sqlException(Unknown Source) at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source) at org.hsqldb.jdbcDriver.getConnection(Unknown Source) at org.hsqldb.jdbcDriver.connect(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:156) at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:144) at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:132) at org.springframework.orm.hibernate.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:59) at net.sf.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:73) at net.sf.hibernate.cfg.Configuration.buildSettings(Configuration.java:1155) at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:789) at org.springframework.orm.hibernate.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:467) at org.springframework.orm.hibernate.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:405) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:991) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:208) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:136) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:224) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:284) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:80) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56) at com.projectx.dao.UserDAOTestAbstract.setUp(UserDAOTestAbstract.java:25) at junit.framework.TestCase.runBare(TestCase.java:125) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186) 18:57:21,591 INFO SettingsFactory:103 - Use scrollable result sets: false 18:57:21,591 INFO SettingsFactory:106 - Use JDBC3 getGeneratedKeys(): false 18:57:21,591 INFO SettingsFactory:109 - Optimize cache for minimal puts: false 18:57:21,591 INFO SettingsFactory:118 - Query language substitutions: {} 18:57:21,601 INFO SettingsFactory:129 - cache provider: net.sf.hibernate.cache.EhCacheProvider 18:57:21,601 INFO Configuration:1116 - instantiating and configuring caches 18:57:21,952 INFO SessionFactoryImpl:118 - building session factory 18:57:22,602 INFO SessionFactoryObjectFactory:82 - Not binding factory to JNDI, no JNDI name configured 18:57:22,783 WARN SQLErrorCodesFactory:274 - Error while getting database metadata org.springframework.jdbc.support.MetaDataAccessException: Error while getting connection; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC connection; nested exception is java.sql.SQLException: Access is denied org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC connection; nested exception is java.sql.SQLException: Access is denied java.sql.SQLException: Access is denied at org.hsqldb.jdbc.jdbcUtil.sqlException(Unknown Source) at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source) at org.hsqldb.jdbcDriver.getConnection(Unknown Source) at org.hsqldb.jdbcDriver.connect(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:156) at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:144) at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:132) at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:165) at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:144) at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:120) at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:93) at org.springframework.jdbc.support.SQLErrorCodesFactory.getErrorCodes(SQLErrorCodesFactory.java:209) at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.setDataSource(SQLErrorCodeSQLExceptionTranslator.java:115) at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.<init>(SQLErrorCodeSQLExceptionTranslator.java:96) at org.springframework.orm.hibernate.SessionFactoryUtils.newJdbcExceptionTranslator(SessionFactoryUtils.java:122) at org.springframework.orm.hibernate.HibernateAccessor.getJdbcExceptionTranslator(HibernateAccessor.java:158) at org.springframework.orm.hibernate.HibernateAccessor.afterPropertiesSet(HibernateAccessor.java:201) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:991) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:208) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:136) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:230) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:284) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:80) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56) at com.projectx.dao.UserDAOTestAbstract.setUp(UserDAOTestAbstract.java:25) at junit.framework.TestCase.runBare(TestCase.java:125) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186) 18:57:22,863 WARN SQLErrorCodesFactory:274 - Error while getting database metadata org.springframework.jdbc.support.MetaDataAccessException: Error while getting connection; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC connection; nested exception is java.sql.SQLException: Access is denied org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC connection; nested exception is java.sql.SQLException: Access is denied java.sql.SQLException: Access is denied at org.hsqldb.jdbc.jdbcUtil.sqlException(Unknown Source) at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source) at org.hsqldb.jdbcDriver.getConnection(Unknown Source) at org.hsqldb.jdbcDriver.connect(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:156) at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:144) at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:132) at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:165) at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:144) at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:120) at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:93) at org.springframework.jdbc.support.SQLErrorCodesFactory.getErrorCodes(SQLErrorCodesFactory.java:209) at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.setDataSource(SQLErrorCodeSQLExceptionTranslator.java:115) at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.<init>(SQLErrorCodeSQLExceptionTranslator.java:96) at org.springframework.orm.hibernate.SessionFactoryUtils.newJdbcExceptionTranslator(SessionFactoryUtils.java:122) at org.springframework.orm.hibernate.HibernateAccessor.getJdbcExceptionTranslator(HibernateAccessor.java:158) at org.springframework.orm.hibernate.HibernateAccessor.afterPropertiesSet(HibernateAccessor.java:201) at org.springframework.orm.hibernate.HibernateTemplate.<init>(HibernateTemplate.java:113) at org.springframework.orm.hibernate.support.HibernateDaoSupport.createHibernateTemplate(HibernateDaoSupport.java:87) at org.springframework.orm.hibernate.support.HibernateDaoSupport.setSessionFactory(HibernateDaoSupport.java:74) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:684) at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:588) at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:720) at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:747) at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:736) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:797) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:637) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:271) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:208) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:136) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:230) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:284) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:80) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56) at com.projectx.dao.UserDAOTestAbstract.setUp(UserDAOTestAbstract.java:25) at junit.framework.TestCase.runBare(TestCase.java:125) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186) 18:57:23,213 WARN JDBCExceptionReporter:38 - SQL Error: -33, SQLState: S1000 18:57:23,223 ERROR JDBCExceptionReporter:46 - Access is denied 18:57:23,233 WARN JDBCExceptionReporter:38 - SQL Error: -33, SQLState: S1000 18:57:23,233 ERROR JDBCExceptionReporter:46 - Access is denied 18:57:23,233 ERROR JDBCExceptionReporter:38 - Cannot open connection java.sql.SQLException: Access is denied at org.hsqldb.jdbc.jdbcUtil.sqlException(Unknown Source) at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source) at org.hsqldb.jdbcDriver.getConnection(Unknown Source) at org.hsqldb.jdbcDriver.connect(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:156) at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:144) at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:132) at org.springframework.orm.hibernate.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:59) at net.sf.hibernate.impl.BatcherImpl.openConnection(BatcherImpl.java:286) at net.sf.hibernate.impl.SessionImpl.connect(SessionImpl.java:3326) at net.sf.hibernate.impl.SessionImpl.connection(SessionImpl.java:3286) at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:65) at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:779) at net.sf.hibernate.loader.Loader.doQuery(Loader.java:265) at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133) at net.sf.hibernate.loader.Loader.doList(Loader.java:1033) at net.sf.hibernate.loader.Loader.list(Loader.java:1024) at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:854) at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1544) at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1521) at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1517) at com.projectx.dao.UserDAOHibernateInterceptorImpl.findUser(UserDAOHibernateInterceptorImpl.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.framework.AopProxyUtils.invokeJoinpointUsingReflection(AopProxyUtils.java:61) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:149) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:116) at org.springframework.orm.hibernate.HibernateInterceptor.invoke(HibernateInterceptor.java:163) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:138) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:152) at $Proxy0.findUser(Unknown Source) at com.projectx.dao.UserDAOTestAbstract.setUp(UserDAOTestAbstract.java:28) at junit.framework.TestCase.runBare(TestCase.java:125) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
Here is the code:
Code:/* * Created on Sep 3, 2004 * Created by Prashant */ package com.projectx.dao; import junit.framework.TestCase; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.projectx.model.User; /** * @author Prashant * */ public abstract class UserDAOTestAbstract extends TestCase { private UserDAO userDAO; /* * @see TestCase#setUp() */ protected void setUp() throws Exception { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(getApplicationContextPath()); this.userDAO = (UserDAO) ctx.getBean("userDAO"); User user = userDAO.findUser("firstuser"); if (user != null) userDAO.deleteUser(user); user = userDAO.findUser("firstuser-changed"); if (user != null) userDAO.deleteUser(user); } public abstract String getApplicationContextPath(); public static void main(String[] args) { junit.textui.TestRunner.run(UserDAOTestAbstract.class); } /* * @see TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); } public void testCreateAndFindUser() { // See if user already exists User user1 = userDAO.findUser("firstuser"); if (user1 != null) { // user exists, check if it correct user assertEquals(user1.getUserName(), "firstuser"); // delete the user to test create userDAO.deleteUser(user1); } // create user User user = new User(); user.setUserName("firstuser"); user.setPassword("firstuserpassword"); userDAO.createUser(user); // find user User user2 = userDAO.findUser("firstuser"); // make sure they are same assertEquals(user, user2); // delte user userDAO.deleteUser(user); } public void testUpdateUser() { // See if user already exists User user1 = userDAO.findUser("firstuser"); if (user1 != null) { // user exists, check if it correct user assertEquals(user1.getUserName(), "firstuser"); // delete the user to test create userDAO.deleteUser(user1); } // create user User user = new User(); user.setUserName("firstuser"); user.setPassword("firstuserpassword"); userDAO.createUser(user); // change user user.setUserName("firstuser-changed"); user.setPassword("firstuserpassword-changed"); // update user userDAO.updateUser(user); // find again User user2 = userDAO.findUser("firstuser-changed"); // are the updates there? assertEquals(user, user2); // delte user userDAO.deleteUser(user); } public void testDuplicateInsert() { // create user User user = new User(); user.setUserName("firstuser"); user.setPassword("firstuserpassword"); userDAO.createUser(user); // create another user, duplicate of first one User user1 = new User(); user1.setUserName("firstuser"); user1.setPassword("firstuserpassword"); try { userDAO.createUser(user1); } catch (Exception e){ // exception must be raise, as test is trying to insert duplicate rows assertTrue(true); return; } // if exception was not raised, then test failed assertTrue(false); } public void testDuplicateUpdate() { // create one user User user = userDAO.findUser("firstuser"); if (user == null) { user = new User(); user.setUserName("firstuser"); user.setPassword("firstuserpassword"); userDAO.createUser(user); } // create another User user1 = userDAO.findUser("firstuser-changed"); if (user1 == null) { user1 = new User(); user1.setUserName("firstuser-changed"); user1.setPassword("firstuserpassword-changed"); userDAO.createUser(user1); } // find the first one User user2 = userDAO.findUser("firstuser"); // change it to match values of second one user2.setUserName("firstuser-changed"); user2.setPassword("firstuserpassword-changed"); // update it, should result in exception try { userDAO.updateUser(user2); } catch (Exception e) { assertTrue(true); return; } // if it reaches here, then test failed as it allowed to update a user to be with same username as another user. assertTrue(false); } }Code:/* * Created on Sep 3, 2004 * Created by Prashant */ package com.projectx.dao; /** * @author Prashant * */ public class UserDAOTestHibernateInterceptor extends UserDAOTestAbstract { /* * (non-Javadoc) * * @see com.projectx.dao.UserDAOTestAbstract#getApplicationContextPath() */ public String getApplicationContextPath() { return ("applicationContext-hibernate-interceptor.xml"); } }The hibernate mapping file is:Code:/* * Created on Sep 3, 2004 * Created by Prashant */ package com.projectx.dao; import java.util.Iterator; import java.util.List; import net.sf.hibernate.Hibernate; import net.sf.hibernate.HibernateException; import net.sf.hibernate.Session; import org.springframework.orm.hibernate.SessionFactoryUtils; import org.springframework.orm.hibernate.support.HibernateDaoSupport; import com.projectx.model.User; /** * @author Prashant * */ public class UserDAOHibernateInterceptorImpl extends HibernateDaoSupport implements UserDAO { /** * @param userName * @return User object for the given userName */ public User findUser(String userName) { Session session = SessionFactoryUtils.getSession(getSessionFactory(), false); try { List list = session.find("from User user where user.userName=?", userName, Hibernate.STRING); Iterator iterator = list.iterator(); while (iterator.hasNext()) { User user = (User) iterator.next(); return user; } return null; } catch (HibernateException ex) { throw SessionFactoryUtils.convertHibernateAccessException(ex); } } /** * @param user * User object to be updated */ public void updateUser(User user) { return; } /** * @param user * User object to be created */ public void createUser(User user) { Session session = SessionFactoryUtils.getSession(getSessionFactory(), false); try { session.save(user); return; } catch (HibernateException ex) { throw SessionFactoryUtils.convertHibernateAccessException(ex); } } /** * @param user * User object to be deleted */ public void deleteUser(User user) { return; } }
Code:<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="com.projectx.model.User" table="user"> <meta attribute="class-description"> Represents a user. </meta> <id name="id" type="int" column="user_id"> <meta attribute="scope-set">protected</meta> <generator class="native"/> </id> <property name="userName" type="string"> <meta attribute="use-in-tostring">true</meta> <column name="username" not-null="true" unique="true"/> </property> <property name="password" type="string"> <meta attribute="use-in-tostring">true</meta> <column name="password" not-null="true"/> </property> </class> </hibernate-mapping>
I am using spring 1.1 and hibernate 2.1.6.
I am using the sample for HibernateInterceptor from Spring documentation as a starting point.
Thanks,
Prashant Rane


Reply With Quote