5
respostas

Erro ao executar o Teste Conta

Ao executar o testeConta ele cria a conta no mysql mas não insere gerando o erro: Hibernate:

create table Conta (
   agencia varchar(255),
    banco varchar(255),
    conta varchar(255),
    id integer not null auto_increment,
    titular varchar(255),
    primary key (id)
) engine=InnoDB

jun 10, 2019 10:48:30 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.curso.financas.modelo.Conta at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188) at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:783) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:761) at br.com.curso.financas.modelo.testeConta.main(testeConta.java:23) Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.curso.financas.modelo.Conta at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:124) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:59) at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:776)

Meu persistence abaixo:

<persistence 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"
    version="2.0">

    <!-- unidade de persistencia com o nome financas -->
    <persistence-unit name="financas">

        <!-- Implementação do JPA, no nosso caso Hibernate -->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <!-- Aqui são listadas todas as entidades -->
        <class>br.com.curso.financas.modelo.Conta</class>

        <properties>    
            <!-- Propriedades JDBC -->
            <property name="javax.persistence.jdbc.driver" 
                value="com.mysql.jdbc.Driver" />

            <property name="javax.persistence.jdbc.url" 
                value="jdbc:mysql://localhost/financas" />

            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="mastersaf"/>

            <!-- 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>
5 respostas

Você está tentando fazer merge de uma entidade conta? Detached significa objeto desacoplado do contexto de persistência. Me manda seu testeConta.java pra eu dar uma olhada, por favor

package br.com.curso.financas.modelo;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class testeConta {

  public static void main(String[] args) {

      Conta conta = new Conta();
      conta.setId(1);
      conta.setTitular("Claudio");
      conta.setBanco("Santander");
      conta.setAgencia("12234");
      conta.setConta("34432");


      EntityManagerFactory emf = Persistence.createEntityManagerFactory("financas");
      EntityManager em = emf.createEntityManager();

      em.getTransaction().begin();
      em.persist(conta);
      em.getTransaction().commit();



      em.close();
      emf.close();

}
}

Aqui a classe conta

package br.com.curso.financas.modelo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Conta {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
     private Integer id;
     private String titular;
     private String agencia;
     private String conta;
     private String banco;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getTitular() {
        return titular;
    }
    public void setTitular(String titular) {
        this.titular = titular;
    }
    public String getAgencia() {
        return agencia;
    }
    public void setAgencia(String agencia) {
        this.agencia = agencia;
    }
    public String getConta() {
        return conta;
    }
    public void setConta(String conta) {
        this.conta = conta;
    }
    public String getBanco() {
        return banco;
    }
    public void setBanco(String banco) {
        this.banco = banco;
    }



}

Algum retorno?

Remove essa linha:

conta.setId(1);

deixa o JPA gerar o id da entidade ao salvar