2016-11-23 2 views
0

엔티티 관리자의 인스턴스를 가져올 때마다 데이터베이스에 새 테이블이 생성되므로 새 테이블을 만들지 않고 Postgresql에서 EntityManager (삽입, 삭제, 데이터베이스 업데이트)를 얻을 수있는 방법은 무엇입니까?최대 절전 모드 JAVA | 새로운 테이블을 생성하지 않고 EntityManager의 인스턴스를 얻는 방법?

법인 "메디는"

@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> 

주 :

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); 
    }  
} 

오류 :

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

답변

2

이미지가 보이지 않습니다. 하지만 이것에

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

을 변경하려고 :

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

안녕, 나는 이미지를 제거하고 XML 코드를 넣어이 줄을 주목할 도움을

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

감사하십시오 필요했다 무엇 은의 persistence.xml이 라인을 삭제입니다 ? 당신이 말한 것을 시도 : 스레드 "main"javax.persistence.PersistenceException에서 예외가 발생했습니다 : 지속성 유닛을 찾을 수 없습니다 : javax.persistence.PersistenceException : [file :/C :/Users/ – DigaoParceiro

1

내가있어! 다시 볼 수있는 날

+0

나는 프로젝트를 시작할 때 데이터베이스 스키마를 생성/업데이트하기 위해 hibernate.hbm2ddl.auto를 사용하고 있다고 생각한다. javax.persistence.schema-generation.database.action에는 create, drop-and-create, drop 값만 있습니다. 처음부터 잘못 알고있는 이유는 업데이트 가치가 없습니다. 하지만 당신 스스로 해결할 수 있습니다. 방법 고마워. 더 나은 이해를 위해. 이것을 읽으십시오. 도움이 될거야. – msagala25

+0

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