Hi Matt,
I tried changing to:
@Autowired
public void setPersonDao(GenericDao<Person, Long> personDao) {
this.personDao = personDao;
}
and run "mvn test -Dtest=PersonDaoTest -Dsurefire.useFile=false" then I got
the following error:
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to C:\workspace\myproject\target\test-classes
[INFO]
------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO]
------------------------------------------------------------------------
[INFO] Compilation failure
C:\workspace\myproject\src\test\java\org\appfuse\dao\PersonDaoTest.java:[18,25]
incompatible types
found :
org.appfuse.dao.GenericDao<org.appfuse.model.Person,java.lang.Long>
required: org.appfuse.dao.PersonDao
my PersonDaoTest.class is below:
package org.appfuse.dao;
import java.util.List;
import org.appfuse.model.Person;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.ExpectedException;
import org.springframework.dao.DataAccessException;
import static org.junit.Assert.*;
public class PersonDaoTest extends BaseDaoTestCase {
@Autowired
private PersonDao personDao;
@Autowired
public void setPersonDao(GenericDao<Person, Long> personDao) {
this.personDao = personDao;
}
@Test
public void testFindPersonByLastName() throws Exception {
List<Person> people = personDao.findByLastName("Raible");
assertTrue(people.size() > 0);
}
@Test
public void testFindPersonByFullName() throws Exception {
List<Person> people = personDao.findByFullName("Raible","Matt");
assertTrue(people.size() > 0);
}
@Test
@ExpectedException(DataAccessException.class)
public void testAddAndRemovePerson() throws Exception {
Person person = new Person();
person.setFirstName("Country");
person.setLastName("Bry");
person = personDao.save(person);
flush();
person = personDao.get(person.getId());
assertEquals("Country", person.getFirstName());
assertNotNull(person.getId());
log.debug("removing person...");
personDao.remove(person.getId());
flush();
// should throw DataAccessException
personDao.get(person.getId());
}
}
and the applicationContext-dao.xml is below
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-lazy-init="true">
<bean
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation"
value="classpath:hibernate.cfg.xml"/>
<property name="hibernateProperties">
<value>
hibernate.dialect=${hibernate.dialect}
hibernate.query.substitutions=true 'Y', false 'N'
hibernate.cache.use_second_level_cache=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
</value>
<!-- Turn batching off for better error messages under
PostgreSQL -->
<!-- hibernate.jdbc.batch_size=0 -->
</property>
</bean>
<!-- Transaction manager for a single Hibernate SessionFactory
(alternative to JTA) -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- Activates scanning of @Autowired -->
<context:annotation-config/>
<!-- Activates scanning of @Repository -->
<context:component-scan base-package="org.appfuse.dao"/>
<!-- Compass Search Section -->
<!-- Compass Bean, automatically scanning for searchable classes within
the model -->
<!-- Hooks into Spring transaction management and stores the index on
the file system -->
<bean id="compass" class="org.compass.spring.LocalCompassBean">
<property name="mappingScan" value="org.appfuse.model" />
<property name="transactionManager" ref="transactionManager" />
<property name="settings">
<map>
<entry key="compass.engine.connection"
value="target/test-index" />
</map>
</property>
</bean>
<!-- Compass Template allowing to automatically join/start exising
transactions when performing operations -->
<bean id="compassTemplate" class="org.compass.core.CompassTemplate">
<property name="compass" ref="compass" />
</bean>
<!-- Compass Search Helper allowing to perform search operations in a
simpler manner -->
<bean id="compassSearchHelper"
class="org.compass.core.support.search.CompassSearchHelper">
<constructor-arg ref="compass" />
<property name="pageSize" value="10" />
</bean>
<!-- CompassGps will automatically mirror any changes done thorugh
Hibernate to searchable classes to the index -->
<!-- It will also provide the index operation allowing to reindex the
database -->
<bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps"
init-method="start" destroy-method="stop">
<property name="compass" ref="compass" />
<property name="gpsDevices">
<list>
<bean
class="org.compass.gps.device.hibernate.HibernateGpsDevice">
<property name="name" value="hibernate" />
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</list>
</property>
</bean>
<bean class="org.appfuse.dao.spring.HibernateExtensionPostProcessor">
<property name="annotatedClasses">
<list>
<value>org.appfuse.model.Person</value>
</list>
</property>
</bean>
</beans>
PersonDao.class
package org.appfuse.dao;
import java.util.List;
import org.appfuse.model.Person;
public interface PersonDao extends GenericDao<Person, Long> {
public List<Person> findByLastName(String lastName);
public List<Person> findByFullName(String lastName, String firstName);
}
PersonDaoHibernate.class:
package org.appfuse.dao.hibernate;
import java.util.List;
import org.appfuse.dao.PersonDao;
import org.appfuse.model.Person;
import org.springframework.stereotype.Repository;
@Repository("personDao")
public class PersonDaoHibernate extends GenericDaoHibernate<Person, Long>
implements PersonDao {
public PersonDaoHibernate() {
super(Person.class);
}
@SuppressWarnings("unchecked")
public List<Person> findByLastName(String lastName) {
return getHibernateTemplate().find("from Person where lastName=?",
lastName);
}
@SuppressWarnings("unchecked")
public List<Person> findByFullName(String lastName, String firstName) {
return getHibernateTemplate().find("from Person where lastName=? and
firstName=?", new String[]{lastName, firstName});
}
}
I have not been using Spring and Hibernate for almost 3 years due to the
company that I working with using their own freaking framework. %-|
Cheers,
Mark Thien
--
View this message in context:
http://n4.nabble.com/No-need-to-register-personDao-in-applicationContext-dao-xml-anymore-tp1744994p1745281.html
Sent from the AppFuse - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]