2016-11-23 7 views
0

Entity Managerのインスタンスを取得するたびに、データベースに新しいテーブルが作成されるため、新しいテーブルを作成せずにPostgreSQLでEntityManagerを取得(挿入、削除、データベースの更新)する方法はありますか?Hibernate 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コードを入れて、あなたが再び見ることができます? スレッド "main" javax.persistence.PersistenceExceptionの例外:永続ユニットを見つけることができません 原因:javax.persistence.PersistenceException:[file:/ C:/ Users /]の解析中に予期しないエラーが発生しました。 – DigaoParceiro

1

私が得ました! 何必要だったことにpersistence.xmlのこの行を削除します:

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

ためのおかげで

+0

私はhibernate.hbm2ddl.autoを使って、プロジェクトの起動時にデータベーススキーマを作成/更新すると思っています。 javax.persistence.schema-generation.database.actionには、作成、削除、および作成のドロップ値しかありません。それは最初の場所でそれが間違っていた理由は、更新値を持っていません。しかしあなたはそれをあなた自身で解決します。途中でありがとう。理解を深めるためにこれを読む。それが役立ちます。 – msagala25

+0

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

関連する問題