Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

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!