2016-11-23 5 views
0

jedes Mal, wenn ich die Instanz von Entity Manager bekommen will, erstellt neue Tabellen in der Datenbank, so wie ich den EntityManager (Einfügen, Löschen, Aktualisieren der Datenbank) in Postgresql ohne neue Tabellen erstellen kann?Hibernate JAVA | Wie bekomme ich eine Instanz von EntityManager OHNE eine neue Tabelle zu erstellen?

Entity "Medico":

@Entity 
@Table(name = "medico") 
@SequenceGenerator (name = "medico_seq",sequenceName="medico_seq",allocationSize = 1, initialValue = 1) 
public class Medico implements Serializable{ 
    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator = "medico_seq") 
    private Integer id = null; 
    private String especializacao; 
    private Integer diasRetorno; 
    private Time tempoConsulta;  
    private String nome; 
    private String cpf; 
    private String email; 
    private String senha; 
    private String telefone; 
    private String cidade; 
    private String estado; 
    private String cep; 
    private String endereco; 
    private String bairro; 
    private Integer enderecoNumero; 


    public Medico(String especializacao, Integer diasRetorno, Time tempoConsulta, String nome, String cpf, String email, String senha, String telefone, String cidade, String estado, String cep, String endereco, String bairro, Integer enderecoNumero) { 
     //... 
    } 
    //getters and setters 
} 

"MedicoDAO"

package dao; 

import entidade.Medico; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 
import org.hibernate.Session; 

public class MedicoDAO { 

    public Medico salvar (Medico medico){ 

     EntityManager em = Persistence.createEntityManagerFactory("PersistenciaPU").createEntityManager(); 
     try{em.getTransaction().begin(); 
      if(medico.getId()==null){ 
       em.persist(medico); //Faz o insert 
      } 
      else{ 
       medico = em.merge(medico); // Faz o update 
      } 

      em.getTransaction().commit(); 
     }catch(Exception ex){ 
      System.err.println("ERRO123: "+ex.getMessage()); 
     }finally{ 
      em.close(); 
     } 
     em.close(); 
     return medico; 

    } 
} 

"persistence.xml"

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="PersistenciaPU" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>entidade.HorarioAtendimentoMedico</class> 
    <class>entidade.Medico</class> 
    <class>entidade.Paciente</class> 
    <properties> 
     <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/clinica"/> 
     <property name="javax.persistence.jdbc.user" value="postgres"/> 
     <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/> 
     <property name="javax.persistence.jdbc.password" value="123456"/> 
     <property name="javax.persistence.schema-generation.database.action" value="create"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

main:

package persistencia; 

import dao.Auxiliar; 
import dao.MedicoDAO; 
import entidade.Medico; 
import java.sql.Time; 
import javax.persistence.Persistence; 

public class Persistencia { 


    public static void main(String[] args) { 
     Time t = new Time(2,3,4); 
     Medico medico = new Medico("Cirurgiao",7,t,"Roberto","555.458.912-12","[email protected]","12345","48 3275 0463", "Florianópolis", "SC", "88.222-200","Rua Bonita","Lagoa",12); 

     MedicoDAO dao = new MedicoDAO(); 
     dao.salvar(medico); 
    }  
} 

Fehler:

Exception in thread "main" javax.persistence.PersistenceException: Unable to execute JPA schema generation create command [create table medico]

Caused by: org.postgresql.util.PSQLException: ERROR: relation "medico" already exists

Antwort

2

Ich kann das Bild nicht sehen. aber versuchen

<property name="hibernate.hbm2ddl.auto">create</property> // create new schema 

zu, dies zu ändern:

<property name="hibernate.hbm2ddl.auto">update</property> // update the schema 
+0

hallo, ich das Bild entfernen zu bemerken und den XML-Code setzen, können Sie wieder zu sehen, bitte ? Ich habe versucht, das zu tun, was Sie gesagt haben: Ausnahme im Thread "Haupt" javax.persistence.PersistenceException: Kann Persistenzeinheiten nicht finden verursacht durch: javax.persistence.PersistenceException: Unerwarteter Fehler parsing [Datei:/C:/Benutzer/DigaoParceiro/Documents/NetBeansProjects/Persistencia/build/classes/META-INF/persistence.xml] – DigaoParceiro

1

Ich habe! Was benötigt wurde, ist diese Zeile des persistence.xml löschen:

property name="javax.persistence.schema-generation.database.action" value="create"/

Dank für das mir helfen, diese Linie

+0

Ich sehe, ich dachte, Sie verwenden hibernate.hbm2ddl.auto zum Erstellen/Aktualisieren eines Datenbank-Schema beim Start des Projekts. javax.persistence.schema-generation.database.action hat nur Werte für create, drop-and-create und drop. Es hat keinen Aktualisierungswert, deshalb haben Sie es zuerst falsch verstanden. aber du löst es selbst. Danke übrigens. zum besseren Verständnis. lesen Sie dies. Es wird helfen. – msagala25

+0

https://docs.oracle.com/javaee/7/tutorial/persistence-intro005.htm – msagala25

Verwandte Themen