DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
fajo
 


País: Brasil
Estado: PI
Cidade: Teresina
Mensagens: 40
 Postado em: 19/5/2010 10:42:51 AM
 
Pessoal, tudo blz, é o seguinte, possuo algumas tabelas q suas chaves são atribuidas manualmente (eu sei q não é legal, mas é necessário), o problema é q quando mudo a chave e mando atualizar através do merge, ele faz é inserir um novo registro com os dados, o q eu posso fazer pra isso não acontecer? Obrigado
ANGELO BRANDãO MIRANDA SANTOS
 

 


País: Brasil
Estado: BA
Cidade: Salvador
Mensagens: 57
 Postado em: 20/5/2010 09:36:41 AM
 
Olá fajo,

Quando vc altera a chave de um registro , o "merge" entende como um novo registro.

Tenta usar o update().

Até.
fajo
 


País: Brasil
Estado: PI
Cidade: Teresina
Mensagens: 40
 Postado em: 20/5/2010 10:20:12 AM
 
Oi Angelo, blz cara,

bom, é o seguinte, o meu salvar tá assim:

[CODE]
        if (novoRegistro == true) {
            empresaDao.salvar(empresa);
            FacesUtils.mensErro("Registro Salvo com Sucesso!");
        } else {
            empresaDao.atualizar(empresa);
            FacesUtils.mensErro("Registro Atualizado com Sucesso!");
        }

        return "sucesso";
[/CODE]

e o atualizar:

[CODE[
    @Transactional(readOnly=false,propagation=Propagation.REQUIRED)
    public T atualizar(T object) {
        getEntityManager().merge(object);
        return object;
    }

[/CODE]

esqueci de mencionar q estou usando Spring, JPA.
fajo
 


País: Brasil
Estado: PI
Cidade: Teresina
Mensagens: 40
 Postado em: 20/5/2010 11:10:01 AM
 
  Oi Angelo, blz cara,

bom, é o seguinte, o meu salvar tá assim:

[CODE]
        if (novoRegistro == true) {
            empresaDao.salvar(empresa);
            FacesUtils.mensErro("Registro Salvo com Sucesso!");
        } else {
            empresaDao.atualizar(empresa);
            FacesUtils.mensErro("Registro Atualizado com Sucesso!");
        }

        return "sucesso";
[/CODE]

e o atualizar:

[CODE[
    @Transactional(readOnly=false,propagation=Propagation.REQUIRED)
    public T atualizar(T object) {
        getEntityManager().merge(object);
        return object;
    }

[/CODE]

esqueci de mencionar q estou usando Spring, JPA.
fajo
 


País: Brasil
Estado: PI
Cidade: Teresina
Mensagens: 40
 Postado em: 20/5/2010 11:11:59 AM
 
Desculpe ter colocado 2 vezes, é q na 1ª tava aparecendo um erro estranho de asp, pensei q era o navegador, mas abri em outra e a mesma mensagem de erro era mostrada ai respondi de novo, então apareceu a anterior correta, super estranho.
DYEGO SOUZA DO CARMO
 

 


País: Brasil
Estado: PR
Cidade: xxxxx
Mensagens: 1836
 Postado em: 22/5/2010 12:22:42 PM
 
Realmente , voce nao vai conseguir fazer isto...


utilize o comando UPDATE mesmo... (o JPA suporta o comando UPDATE)


Trocar chaves de tabela alem de nao ser comum não é algo indicado..
fajo
 


País: Brasil
Estado: PI
Cidade: Teresina
Mensagens: 40
 Postado em: 24/5/2010 11:03:16 AM
 
Dyego, tentei fazer o q vc disse, trocar o merge por update, mas não deu certo:

#Código

    @Transactional(readOnly=false,propagation=Propagation.REQUIRED)
    public T atualizar(T object) {
        getEntityManager().update(object);
        return object;
    }


The method update(T) is undefined for the type EntityManager.

E agora?
DYEGO SOUZA DO CARMO
 

 


País: Brasil
Estado: PR
Cidade: xxxxx
Mensagens: 1836
 Postado em: 25/5/2010 08:24:22 PM
 
troque:

public T atualizar(T object) {
        getEntityManager().update(object);
        return object;
    }

para:

public <T> T atualizar(T object) {
        getEntityManager().update(object);
        return object;
    }




e teste

fajo
 


País: Brasil
Estado: PI
Cidade: Teresina
Mensagens: 40
 Postado em: 26/5/2010 09:31:34 AM
 
Dyego, quando coloquei o q vc disse deu erro, vou colocar a classe toda:

#Código

@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;
   
    @SuppressWarnings("unchecked")
    public DaoGenericoImp(){
        this.oClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }
   
    @Override
    @Transactional(readOnly=false,propagation=Propagation.REQUIRED)
    public <T> T atualizar(T object) {
        getEntityManager().update(object);
        return object;
    }

    @Override
    @Transactional(readOnly=false,propagation=Propagation.REQUIRED)
    public void excluir(T object) {
        object = getEntityManager().merge(object);
        getEntityManager().remove(object);
    }

    @Override
    public Class<T> getObjectClass() {
        return this.oClass;
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<T> listPesq(String query) {
        Query q = getEntityManager().createQuery(query);
        return q.getResultList();
    }

    @SuppressWarnings("unchecked")
    @Override
    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")
    @Override
    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")
    @Override
    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;
        }
    }

    @Override
    public T pesquisarPorId(ID id) {
        return (T)getEntityManager().find(oClass, id);
    }

    @Override
    @Transactional(readOnly=false,propagation=Propagation.REQUIRED)
    public T salvar(T object) {
        getEntityManager().clear();
        getEntityManager().persist(object);
        return object;
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<T> todos() {
        String queryS = "SELECT obj FROM "+oClass.getSimpleName();
        Query query = getEntityManager().createQuery(queryS);
        return query.getResultList();
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<T> todos(int ordem) {
        String queryS = "SELECT obj FROM "+oClass.getSimpleName()+" obj ORDER BY "+ordem;
        Query query = getEntityManager().createQuery(queryS);
        return query.getResultList();
    }
   
    @PersistenceContext
    public void setEntityManager(EntityManager em) {
        this.entityManager = em;
    }

    public EntityManager getEntityManager() {
        if (entityManager == null)
             throw new IllegalStateException("Erro");
        return entityManager;
    }

}


e o erro:

#Código

Multiple markers at this line
    - The method atualizar(T) of type DaoGenericoImp<T,ID> must override or implement a supertype method
    - Name clash: The method atualizar(T) of type DaoGenericoImp<T,ID> has the same erasure as atualizar(T) of type DaoGenerico<T,ID> but does not
     override it
    - The type parameter T is hiding the type T

DYEGO SOUZA DO CARMO
 

 


País: Brasil
Estado: PR
Cidade: xxxxx
Mensagens: 1836
 Postado em: 3/6/2010 05:03:47 PM
 
Voce não esta repetindo os SUPERCAT METHODS ?

fajo
 


País: Brasil
Estado: PI
Cidade: Teresina
Mensagens: 40
 Postado em: 3/6/2010 06:52:24 PM
 

Só entendi a parte do repetindo, hehehe, não entendi o q são os SUPERCAT METHODS.

 
Mas não, não repeti nenhum metodo de salvamento.
CARLOS EDUARDO DOMINGUES MAZZI
 

 


País: Brasil
Estado: SP
Cidade: LINS
Mensagens: 591
 Postado em: 28/8/2010 08:46:01 PM
 
Dyego, tbm desconheco esse termo SUPERCAT method...o que é?
DYEGO SOUZA DO CARMO
 

 


País: Brasil
Estado: PR
Cidade: xxxxx
Mensagens: 1836
 Postado em: 6/9/2010 09:53:49 AM
 
Troque:

public <T> T atualizar(T object) {
        getEntityManager().update(object);
        return object;
    }



por:



public <T> T atualizar(T object) {
       
return  getEntityManager().update(object);
    }




e teste por favor :)

SUPERCAT METHODS = Uma implementação de superclasse.
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03