Ajuda com o entityManager e a salvar transações no banco de dados(Resolvido)

8 respostas
MarceloMVT

Olá, antes de tudo obrigado por ler... preciso de ajuda.. o caso é o seguinte:
Eu estou trabalhando em um sistema e estou utilizando o netbeans 7.2.1; então eu criei algumas tabelas, entre elas as tabelas "LOCACAO_DET" , "LOCACAO_CABECALHO" , "CACAMBAS", então utilizei a função
"Form de Amostra Mestre/Detalhe" e utilizei as tabelas "LOCACAO_DET" , "LOCACAO_CABECALHO". até ai blz

O problema é que eu adicionei uma tabela e vinculei ela a tabela do banco "CACAMBAS", vinculei uns jtextifield e blz ela edita, e adicionei um botão para salvar com esse código que copiei e colei no botão salvar no jframe locacao,:
entityManager.getTransaction().begin();  
        Cacambas c = new Cacambas();
        
        try {
            entityManager.getTransaction().commit();
            entityManager.getTransaction().begin();
        } catch (RollbackException rex) {
            rex.printStackTrace();
            entityManager.getTransaction().begin();
            List<br.com.beans.Cacambas> merged = new ArrayList<br.com.beans.Cacambas>(list.size());
            for (br.com.beans.Cacambas c : list) {
                merged.add(entityManager.merge(c));
            }
            list.clear();
            list.addAll(merged);
        }
Estou tendo problemas em adequar o primeiro erro que aparece é esse que aparece na linha 11:
variable c is already defined in method newButton6ActionPerformed(ActionEvent)

incompatible types
  required: Cacambas
  found:    LocacaoCabecalho
----
(Alt-Enter mostra dicas)
Porém eu ja estanciei o "c" bom.. o outro erro é esse na linha 15;
no suitable method found for addAll(List<Cacambas>)
    method List.addAll(int,Collection<? extends LocacaoCabecalho>) is not applicable
      (actual and formal argument lists differ in length)
    method List.addAll(Collection<? extends LocacaoCabecalho>) is not applicable
      (actual argument List<Cacambas> cannot be converted to Collection<? extends LocacaoCabecalho> by method invocation conversion)
----
(Alt-Enter mostra dicas)

Espero que alguém possa me ajudar e desde já peço desculpa caso a pergunta seja muito chula, é que estou iniciando em java ainda.

8 Respostas

tiagoberga

Meu caro, de uma pesquisada sobre

AbstractFacade<classe_entidade>

talvez possa ajudá-lo

drsmachado

Camarada, não existe “estanciar”, a forma adequada seria instanciar.
Segundo, quando você tem:

Cacambas c = new Cacambas();

E, no mesmo método (ou seja, no mesmo espaço) você tenta fazer

for(br.com.beans.Cacambas c :list){

Receberá este erro com certeza.

variable c is already defined in method newButton6ActionPerformed(ActionEvent)

O segundo erro diz que você possui uma lista de LocacaoCabecalho e quer retirar dela Cacambas. Você não tem como tirar leite de um pé de café, nem um capuccino de uma vaca, não concorda?

O terceiro erro diz que você está tentando inserir uma coleção de Cacambas em uma coleção de LocacaoCabecalho. Isso não é possível.

Sugestão, esqueça o JPA, Hibernate, Netbeans e volte a estudar java básico. Sem entender o básico, você nunca conseguirá programar com isso tudo.

MarceloMVT

Achei que aqui era a parte de ajuda em Java Básico…

Caso mais alguém esteja interessado em ajudar gostaria de saber se tem como eu reaproveitar esse código desse botão que funciona do Form de amostra mestre detalhe que criei no netbeans.

caso não seja possível reaproveitar, gostaria de saber como faço para persistir um dado no banco de dados, como faço para salvar a alteração dessa tabela que vinculei do banco…

Bom de qualquer maneira obrigado por ler…

drsmachado

Persistência não é java básico. Você não leu as definições dos fóruns?

E

Consegue perceber a diferença?

MarceloMVT

Estava no primeiro post

“Espero que alguém possa me ajudar e desde já peço desculpa caso a pergunta seja muito chula, é que estou iniciando em java ainda.”

Creio que seria mais gentil apenas não responder… mais se acha que acrescentou algo legal…

Caso alguém possa me ajudar espero que responda…

MarceloMVT

Consegui resolver… tive que dar um commit no banco e iniciar a transação…

entityManager.getTransaction().commit();
         entityManager.getTransaction().begin();

depois foi só reutilizar o código que o próprio NetBeans criou no “Form de amostra Mestre/Detalhe”

List<br.com.beans.LocacaoCabecalho> merged = new ArrayList<br.com.beans.LocacaoCabecalho>(list.size()); for (br.com.beans.LocacaoCabecalho L : list) { merged.add(entityManager.merge(L)); } list.clear(); list.addAll(merged);

Salvando assim a tabela que vinculei… Obrigado tiagoberga pela ajuda

tiagoberga

Por nada! por via das dúvidas…segue um exemplo de AbstractFacade<classe_entidade> como havia dito, esta pode ser utilizada genericamente para todo tipo de ‘‘insert, update, select_all ou delete’’ aplicada a qualquer entidade:

public void save(T entity) throws DaoException {
        if (entity instanceof PersistentObject) {
            PersistentObject obj = (PersistentObject) entity;
            if (obj.isNew()) {
                create(entity);
            } else {
                edit(entity);
            }
        }
    }

    public void edit(T entity) throws DaoException {
        try {
            getEntityManager().merge(entity);
            getEntityManager().flush();
        } catch (PersistenceException e) {
            String erro = UtilException.messagesForDaoException(e);
            throw new DaoException(erro, e);
        } catch (ConstraintViolationException e) {
            String erro = UtilException.messagesForDaoException(e);
            throw new DaoException(erro, e);
        }
    }

    public void remove(T entity) throws DaoException {
        try {
            getEntityManager().remove(getEntityManager().merge(entity));
            getEntityManager().flush();
        } catch (PersistenceException e) {
            String erro = UtilException.messagesForDaoException(e);
            throw new DaoException(erro, e);
        }
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }

    public List<T> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }
MarceloMVT

Perfeito! Obrigado!

Criado 19 de abril de 2013
Ultima resposta 23 de abr. de 2013
Respostas 8
Participantes 3