Atualizar entidade com JDO

2 respostas
M

Estou desenvolvendo uma aplicação para rodar no Google App Engine que utiliza JDO para persistencia.

Consigo fazer consultas e inserções normalmente, mas ao tentar atualizar uma entidade, o JDO grava um novo registro, como se eu fizesse uma inserção.
Segue o código:

// Método que uso para persistir o objeto
public void saveCustomer(Customer customer) {
    PersistenceManagerFactory pmf = PMF.get();

    PersistenceManager pm = pmf.getPersistenceManager();
    try {
        pm.makePersistent(customer);
    }
    finally {
        pm.close();
    }
}

// Essa é a classe que estou tentando persistir
@PersistenceCapable
public class Customer implements Serializable {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.SEQUENCE)
    private Long id;

    @Persistent
    private String name;
    
    public Customer() {}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

Um detalhe: A instancia de Customer que eu passo para o método saveCustomer() não é obtida pelo JDO. Ela é recebida através de uma chamada remota feita pelo mecanismo de RPC do GWT.

O que posso estar fazendo de errado?

2 Respostas

von.juliano

Ele já está com o id preenchido? Se estiver nulo ele vai considerar uma nova inserção.

Senão, antes de chamar o makePersistent, tente chamar pm.refresh(customer).

Vê se resolve! Flw! :thumbup:

M

Era o id zerado mesmo.
Por uma falha minha, este campo estava vindo zerado quando o objeto era transmitido do cliente para o servidor de aplicação

Obrigado

Criado 6 de agosto de 2010
Ultima resposta 7 de ago. de 2010
Respostas 2
Participantes 2