Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

Configuração do persistence.xml

Boa noite, gostaria de saber onde deve estar o persistence.xml em um projeto web no eclipse neon. Atualmente o meu se encontra dentro do src/

ex:.

comando tree dentro de src
├── META-INF
│   └── persistence.xml  // aqui meu persistence.xml
└── br
    └── com
        └── trocacerta
            ├── DAO
            │   ├── ClienteDAO.java
            │   ├── DAO.java
            │   └── VendaDAO.java
            ├── interfaces
            │   └── Servico.java
            └── web
                ├── AppFilter.java
                ├── Cliente.java
                ├── Index.java
                ├── Server.java
                └── Venda.java

Código do 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="OleoApp" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <!-- Aqui são listadas todas as entidades a serem persistidas -->
        <class>br.com.trocacerta.web.Cliente</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/oleo_app"/>
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="" />
            <!-- Configurações específicas do Hibernate -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>

não acontece nada, nada mesmo, nem erro e nem cria as tabelas, mas o código esta sendo executado

codigo da classe Cliente


package br.com.trocacerta.web;

import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Persistence;
import javax.persistence.SequenceGenerator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.trocacerta.DAO.ClienteDAO;
import br.com.trocacerta.interfaces.Servico;

@Entity
@SequenceGenerator(name = "SEQ_CLIENTE", sequenceName = "SEQ_CLIENTE", initialValue = 1)
public class Cliente implements Servico {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_CLIENTE")
    private Integer id;
    private String email;
    private String nome;
    private String fone;

    public Cliente() {
        // TODO Auto-generated constructor stub
    }

    public Cliente(String nome, String fone, String email) {
        this.nome = nome;
        this.fone = fone;
        this.email = email;
    }

    public String cadastrar(HttpServletRequest req, HttpServletResponse resp) {
        try {
            String cNome = req.getParameter("nome");
            String cEmail = req.getParameter("email");
            String cFone = req.getParameter("fone");
            Cliente cliente = new Cliente(cNome, cFone, cEmail);

            EntityManagerFactory emf = Persistence.createEntityManagerFactory("OleoApp");
            EntityManager em = emf.createEntityManager();
            em.getTransaction().begin();
            em.persist(cliente);
            em.getTransaction().commit();

            em.close();
            emf.close();
            System.out.println("cliente criado");
            System.out.println(cliente);
            req.setAttribute("success", "cliente cadastrado com successo");
            return loadView("fim.jsp");
        } catch (Exception e) {
            req.setAttribute("erro", "cliente cadastrado com successo");
        }
        return loadView("fim.jsp");
    }

    public String novoCliente(HttpServletRequest req, HttpServletResponse resp) {
        return loadView("novo_cliente.jsp");
    }

    public String getNome() {
        return nome;
    }

    public String getFone() {
        return fone;
    }

    public String getEmail() {
        return email;
    }

    @Override
    public String toString() {
        return nome + " : " + fone + " : " + email;
    }

}
11 respostas

Boa tarde Ramires, está chamando o método cadastrar de uma aplicação web né?

essas linhas printam no console?

System.out.println("cliente criado");
            System.out.println(cliente);

sim, por isso sei que esta funcionando.

Vou rodar seu exemplo e analisar o erro! só faz um favor pra mim, pode substituir a linha

<persistence-unit name="OleoApp" transaction-type="RESOURCE_LOCAL">

do persistence.xml por:

<persistence-unit name="OleoApp"

só tirar o transaction-type="RESOURCE_LOCAL"

Bom dia Guilherme!

quando eu retiro o tipo da transação ele lança uma excessão.

eu esqueci de comentar que os pacotes jars estão com os pontos de interrogação, mas eu já fiz o build path, segue a imagem do projeto no eclipse.

http://ramiresmoreira.tumblr.com/post/155021231334

As interrogação sào porque esses arquivos não estão sincronizados apenas... dentro de Java Resources voce tem a pasta src. dentro de src tem WEB-INF e dentro de WEB-INF o persistence.xml?

Olá Guilherme,

Não estou em casa agora, mas pelo que você falou pode até ser isso pq eu coloquei uma pasta META-INF e não WEB-INF, quando eu chegar vou modificar e posto o resultado.

Perdão Ramires, é META-INF mesmo foi falha minha!

Ramires, o arquivo persistence.xml deve estar dentro de uma pasta chamada META-INF que, por sua vez, deve estar dentro da pasta src.

Fica assim:

src\META-INF\persistence.xml

Esperto ter ajudado.

Abraço.

Boa tarde Manoel,

ela ja esta dentro, eu postei logo no início o comando tree.

solução!

Ramires, no persistence.xml troca

value="com.mysql.jdbc.driver

por Driver com D Maiusculo

value="com.mysql.jdbc.Driver

Guilherme deu certo, obrigado!