Remove do JPA + Spring nao dispara comando delete

12 respostas
furacao123

Estou tentando testar os meus repositorios do Spring que utilizam JPA + Hibernate, mas quando chamo o metodo remove, nao é executado nada

meu GenericJpadao

public void remove(T entity) { getEntityManager().remove(entity); }

meu service

@Override @Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class) public void remove(Loja l) { lojaDao.remove(l); }

quando chamo o metodo remove do service nao faz nada o que esta errado?

12 Respostas

Hebert_Coelho

Vc debugou? Ele chega a entrar em algum método?

Aparece alguma mensagem de erro no console?

furacao123

depurei nao da erro nenhum ele passa no metodo, adicionei um flush logo apos o remove, no console vi a saida do comando delete, mas no banco nao deletou nada

Hebert_Coelho

Faça um commit() e depois flush();

furacao123

mas o spring nao deveria controlar as transações automaticamente?

no getEntityManager nao tenho a opção commit

furacao123
minha classe genericJpaDao
public abstract class GenericJpaDao<T, ID extends Serializable> {

    private Class<T> entityBeanType;
    @PersistenceContext
    protected EntityManager em;

    public GenericJpaDao() {
        Type genericSuperclass = getClass().getGenericSuperclass();
        ParameterizedType type = (ParameterizedType) genericSuperclass;
        this.entityBeanType = ((Class) type.getActualTypeArguments()[0]);
    }

    public void setEntityManager(EntityManager em) {
        this.em = em;
    }

    protected EntityManager getEntityManager() {
        if (this.em == null) {
            throw new IllegalStateException("EntityManager has not been set on DAO before usage");
        }
        return this.em;
    }

    protected Class<T> getEntityBeanType() {
        return this.entityBeanType;
    }

...

public void remove(T entity) {
        getEntityManager().remove(entity);
    }
Hebert_Coelho

furacao123:
mas o spring nao deveria controlar as transações automaticamente?

no getEntityManager nao tenho a opção commit


Não sei como está configurado seu Spring, mas imagino que a configuração default seja auto-commit.

Bizarro é ele não remover ou fazer qualquer outra coisa.

furacao123

Estranho mesmo, sera que é alguma coisa com o Junit, pois estou utilizando esse remove no ambiente de testes

dtxk

furacao123:
Estou tentando testar os meus repositorios do Spring que utilizam JPA + Hibernate, mas quando chamo o metodo remove, nao é executado nada

meu GenericJpadao

public void remove(T entity) { getEntityManager().remove(entity); }

meu service

@Override @Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class) public void remove(Loja l) { lojaDao.remove(l); }

quando chamo o metodo remove do service nao faz nada o que esta errado?

se nao me engano vc tem que dar o commit para efetuar a altera~ção

Hebert_Coelho

Cara, Spring controla transação em testes??? Nunca ouvi falar disso não.

furacao123

eu tambem tinha essa duvida segue o post do controle da transação com testes no Spring

http://www.guj.com.br/java/263170-testes-com-spring-3–junit#1376098

Entao quando utilizo o Spring nao tenho a opcao de fazer o commit

daniel.netti

Conseguiu resolver? To com o mesmo problema aqui, mas não é ambiente de testes, é desenvolvimento, sem Junit.
Valeu.

furacao123

Entao consegui resolver, no link acima

http://www.guj.com.br/java/263170-testes-com-spring-3–junit#1376098

Criado 19 de janeiro de 2012
Ultima resposta 5 de jun. de 2012
Respostas 12
Participantes 4