java - hibernate JAVA |如何在不创建新表的情况下获取 EntityManager 的实例?

标签 java postgresql hibernate jpa persistence

每次我想要获取 Entity Manager 实例时都会在数据库中创建新表,那么如何在不创建新表的情况下在 Postgresql 中获取 EntityManager(插入、删除、更新数据库)?

实体“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;

    }
}

“持久化.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","roberto@medico.com","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

最佳答案

我看不到图像。但试着改变

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

为此:

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

关于java - hibernate JAVA |如何在不创建新表的情况下获取 EntityManager 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40754271/

相关文章:

mysql - grails 不允许导致数据修改的查询

java - 获取 JDBC 类型的异常无方言映射

java - 不同表的 hql 请求

java - MapMaker 设计模式?

java - 如何在 Java 测试框架中隐藏页面对象初始化

postgresql - Postgres 是否保证按提供的更新语句的顺序锁定行?

postgresql - 结合 SUM 和 CAST - 不起作用?

java - 如何将 PApplet 对象嵌入到普通小程序中?

java - 如何发送红外代码,将字符串转换为 "IR string"

postgresql - Mac OS X 10.11 - 将 Postgres 添加到 $PATH 失败