Olá pessoal meu código esta o seguinte…
tenho uma interface chamda de DaoGenerico
import java.io.Serializable;
import java.util.List;
import java.util.Map;
public interface DaoGenerico<T, ID extends Serializable> {
public Class<T> getObjectClass();
public T salvar(T object);
public T pesquisarPorId(ID id);
public T atualizar(T object);
public void excluir(T object);
public List<T> todos();
public List<T> listPesqParam(String query, Map<String, Object> params);
public List<T> listPesqParam(String query, Map<String, Object> params,
int maximo, int atual);
public List<T> listPesq(String query);
public T pesqParam(String query, Map<String, Object> params);
}
Tenho a classe DaoGenericoImp que implementa o DaoGenerico a cima
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.exemplo.livro.dao.DaoGenerico;
@Transactional(readOnly = true, propagation = Propagation.REQUIRED)
public class DaoGenericoImp<T, ID extends Serializable>
implements DaoGenerico<T, ID> {
private EntityManager entityManager;
private final Class<T> oClass;//object class
public Class<T> getObjectClass() {
return this.oClass;
}
@SuppressWarnings("unchecked")
@PersistenceContext
public void setEntityManager(EntityManager em) {
this.entityManager = em;
}
protected EntityManager getEntityManager() {
if (entityManager == null)
throw new IllegalStateException("Erro");
return entityManager;
}
@SuppressWarnings("unchecked")
public DaoGenericoImp() {
this.oClass = (Class<T>)
( (ParameterizedType) getClass().getGenericSuperclass() ).
getActualTypeArguments()[0];
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public T atualizar(T object) {
getEntityManager().merge(object);
return object;
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void excluir(T object) {
object = getEntityManager().merge(object);
getEntityManager().remove(object);
}
public T pesquisarPorId(ID id) {
return getEntityManager().find(oClass, id);
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public T salvar(T object) {
getEntityManager().clear();
getEntityManager().persist(object);
return object;
}
@SuppressWarnings("unchecked")
public List<T> todos(){
String queryS = "SELECT obj FROM "+oClass.getSimpleName()+" obj";
Query query = getEntityManager().createQuery(queryS);
return query.getResultList();
}
@SuppressWarnings("unchecked")
public List<T> listPesqParam(String query, Map<String, Object> params){
Query q = getEntityManager().createQuery(query);
for(String chave : params.keySet()){
q.setParameter(chave, params.get(chave));
}
return q.getResultList();
}
@SuppressWarnings("unchecked")
public List<T> listPesqParam(String query, Map<String, Object> params,
int maximo, int atual){
Query q = getEntityManager().
createQuery(query).
setMaxResults(maximo).
setFirstResult(atual);
for(String chave : params.keySet()){
q.setParameter(chave, params.get(chave));
}
return q.getResultList();
}
@SuppressWarnings("unchecked")
public List<T> listPesq(String query){
Query q = getEntityManager().createQuery(query);
return q.getResultList();
}
@SuppressWarnings("unchecked")
public T pesqParam(String query, Map<String, Object> params){
Query q = getEntityManager().createQuery(query);
for(String chave : params.keySet()){
q.setParameter(chave, params.get(chave));
}
try{
return (T) q.getSingleResult();
}catch(NoResultException nre){
return null;
}
}
}
aqui está o meu hibernate-cfg.xml
<hibernate-configuration>
<session-factory name="configuration">
<property name="hibernate.connection.driver_class">
org.postgresql.Driver
</property>
<property name="hibernate.connection.password">
postgres
</property>
<property name="hibernate.connection.username">
postgres
</property>
<property name="hibernate.connection.url">
jdbc:postgresql://localhost/e-commers
</property>
<property name="hibernate.dialect">
org.hibernate.dialect.PostgreSQLDialect
</property>
<!-- Visualização da geração do SQL -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbn2ddl.auto">update</property>
<!-- Esquema de conexão -->
<property name="hibernate.c3p0.min.size">5</property>
<property name="hibernate.c3p0.max.size">20</property>
<property name="hibernate.c3p0.timeout.size">180</property>
<property name="hibernate.c3p0.idle_test_period">100</property>
<property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>
<mapping class="com.exemplo.livro.entidade.Categoria" />
</session-factory>
</hibernate-configuration>
aqui esta o meu applicationContext
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="ecommerce" />
</bean>
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<tx:annotation-driven />
<bean id="categoriaDao"
class="com.exemplo.livro.dao.imp.CategoriaDaoImp" />
</bean>
aqui esta minha classe de teste
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.exemplo.livro.dao.CategoriaDao;
import com.exemplo.livro.entidade.Categoria;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "ClassPaht:**/applicationContext*.xml" })
public class TestCategoriaDao {
@Autowired
private CategoriaDao categoriaDao;
private final Integer id = 1;
public void setCaegoriaDao(CategoriaDao categoriaDao) {
this.categoriaDao = categoriaDao;
}
@Test
public void test() {
Categoria teste = null;
teste.setCatNome("a");
teste.setId(2);
Categoria categoria = new Categoria();
categoria = this.categoriaDao.salvar(teste);
}
quando eu rodo o teste, da o seguinte erro,
[ERROR][2009-09-20:11:28:56]= (org.springframework.test.context.TestContextManager.prepareTestInstance(258)) - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@c2b2f6] to prepare test instance [br.com.integrator.daos.tests.TestCategoriaDao@737371]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.integrator.daos.tests.TestCategoriaDao': Autowiring of fields failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.exemplo.livro.dao.CategoriaDao br.com.integrator.daos.tests.TestCategoriaDao.categoriaDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.exemplo.livro.dao.CategoriaDao] is defined: Unsatisfied dependency of type [interface com.exemplo.livro.dao.CategoriaDao]: expected at least 1 matching bean
meus arquivos de hibernate-cfg.xml esta no classpath igualmente com o applicationContext.xml, o livro que estou acompanhando faz dessa maneira e ele diz que funciona xD alguém consegue ver algum erro ae ?!