Problema com Web + JPA

6 respostas
W

Bom eu estou desenvolvendo um trabalho com
JAVA WEB + JPA, fiz os mapeamentos e sempre encontro erros diverssos ...
Entretanto esta funcionando normal no em JEE, vou colocar meu persistence.xml ...

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="JavaApplication2PU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>model.Usuario</class>
    <class>model.Empresa</class>
    <class>model.Agencia</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <validation-mode>NONE</validation-mode>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/sample"/>
      <property name="javax.persistence.jdbc.password" value="app"/>
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
      <property name="javax.persistence.jdbc.user" value="app"/>
      <property name="eclipselink.ddl-generation" value="create-tables"/>

    </properties>
  </persistence-unit>
</persistence>

Quando eu tento fazer um insert da esse erro aqui:

WARNING: StandardWrapperValve[Usuario]: PWC1406: Servlet.service() for servlet Usuario threw exception
java.lang.IllegalArgumentException: Object: Nome:  is not a known entity type.
        at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.mergeCloneWithReferences(UnitOfWorkImpl.java:3469)
        at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.mergeCloneWithReferences(RepeatableWriteUnitOfWork.java:301)
        at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.mergeCloneWithReferences(UnitOfWorkImpl.java:3440)
        at org.eclipse.persistence.internal.jpa.EntityManagerImpl.mergeInternal(EntityManagerImpl.java:414)
        at org.eclipse.persistence.internal.jpa.EntityManagerImpl.merge(EntityManagerImpl.java:391)
        at dao.DAO.adiciona(DAO.java:25)
        at dao.UsuarioDao.adiciona(UsuarioDao.java:18)
        at control.UsuarioController.processRequest(UsuarioController.java:39)
        at control.UsuarioController.doGet(UsuarioController.java:51)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)

Aqui o servlet que eu faço insert:

package control;

import dao.UsuarioDao;
import infra.JpaUtil;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Usuario;

@WebServlet(name="Usuario", urlPatterns={"/Usuario"})
public class UsuarioController extends HttpServlet {
   
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            EntityManager em = new JpaUtil().getEntityManager();  
            UsuarioDao uDao = new UsuarioDao(em);

            Usuario u = new Usuario();
                  u.setId(2);
                  u.setNome("teste1");
                  u.setSobrenome("Teste11");
                  u.setUsuario("teste11");
                  u.setSenha("teste11");
                  u.setNascimento(new Date());
                  u.setEmail("[email removido]");

            em.getTransaction().begin();
            uDao.adiciona(u);
            em.getTransaction().commit();

        } finally { 
            out.close();
        }
    } 


    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }


    @Override
    public String getServletInfo() {
        return "Short description";
    }

}

aqui a classe de usuario:

package model;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import java.util.Date;
import javax.persistence.Temporal;

@Entity(name="usuario")
@Table(name="usuario")
public class Usuario implements Serializable {

    @Id
    @Column(name="id")
    @GeneratedValue(strategy = GenerationType.TABLE)
    private Integer id;
    @Column(name="nome")
    private String nome;
    @Column(name="sobrenome")
    private String sobrenome;
    @Column(name="nascimento")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date nascimento;
    @Column(name="email")
    private String email;
    @Column(name="usuario")
    private String usuario;
    @Column(name="senha")
    private String senha;

    public Usuario() {
    }

    public Usuario(Integer id, String nome, String sobrenome, Date nascimento, String email, String usuario, String senha) {
        this.id = id;
        this.nome = nome;
        this.sobrenome = sobrenome;
        this.nascimento = nascimento;
        this.email = email;
        this.usuario = usuario;
        this.senha = senha;
    }

    public Integer getId() {
        return id;
    }

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

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the sobrenome
     */
    public String getSobrenome() {
        return sobrenome;
    }

    /**
     * @param sobrenome the sobrenome to set
     */
    public void setSobrenome(String sobrenome) {
        this.sobrenome = sobrenome;
    }

    /**
     * @return the nascimento
     */
    public Date getNascimento() {
        return nascimento;
    }

    /**
     * @param nascimento the nascimento to set
     */
    public void setNascimento(Date nascimento) {
        this.nascimento = nascimento;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the usuario
     */
    public String getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    @Override
    public String toString() {
        return "Nome: ";
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }
}

To batendo cabeça aqui !
O Jpa cria as tabelas e tudo ...

Obrigado desde já

6 Respostas

maxmustang

vc ta passando toda hora o msmo usuario e o msmo id???

W

não eu alterno ! Esse servlet é só para teste !

lpalma

Wakko, não é problema de case-sensitive?

Tipo, no persistence você diz [color=red]U[/color]suario e na classe [color=red]u[/color]suario ?

Poderia ver também em sua base de dados se a tabela possui o nome com o U maiúsculo ou minúsculo, assim como os atributos…

É só uma tentativa, mas vale a pena olhar. :slight_smile:

L

Posta o teu UsuarioDao pra dar uma conferida…

W

Acho que case-sensitive não é !

usuarioDao :
package dao;

import model.Usuario;
import javax.persistence.EntityManager;
import java.util.List;

public class UsuarioDao {

    private final DAO<Usuario> dao;
    private final EntityManager em;

    public UsuarioDao(EntityManager em) {
        this.dao = new DAO<Usuario>(em, Usuario.class);
        this.em = em;
    }

    public void adiciona(Usuario conta) {
        this.dao.adiciona(conta);
    }

    public void remove(Usuario conta) {
        this.dao.remove(conta);
    }

    public List<Usuario> lista() {
        return this.dao.lista();
    }

    public Usuario busca(Integer id) {
        return dao.busca(id);
    }
}

Dao :

package dao;

import javax.persistence.EntityManager;
import java.util.List;

public class DAO<T>{
   private final EntityManager em;
   private final Class<T> classe;

   public DAO(EntityManager em, Class<T> classe){
      this.em = em;
      this.classe = classe;
   }
   //Metodos de CRUD genericos

   public T busca(Integer id){
      return this.em.getReference(classe, id);
   }

   public List<T> lista(){
      return em.createQuery("from " + classe.getName()).getResultList();
   }

   public void adiciona(T t){
      this.em.merge(t);
      //this.em.persist(t);
   }

   public void remove(T t){
      this.em.remove(t);
   }
}

e quando eu tento usar o metodo busca da esse erro

WARNING: StandardWrapperValve[Usuario]: PWC1406: Servlet.service() for servlet Usuario threw exception
java.lang.IllegalArgumentException: Unknown entity bean class: class model.Usuario, please verify that this class has been marked with the @Entity annotation.
        at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.getReference(UnitOfWorkImpl.java:5796)
        at org.eclipse.persistence.internal.jpa.EntityManagerImpl.getReference(EntityManagerImpl.java:1186)
        at dao.DAO.busca(DAO.java:17)
        at dao.UsuarioDao.busca(UsuarioDao.java:30)
        at control.UsuarioController.processRequest(UsuarioController.java:45)
        at control.UsuarioController.doPost(UsuarioController.java:67)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)

Obrigado pela ajuda !

Eu comentei o persist por que não funcionou ...

maxmustang

no adiciona… tu ta dando um merge depois um persist?

Criado 31 de agosto de 2010
Ultima resposta 1 de set. de 2010
Respostas 6
Participantes 4