繁体   English   中英

使用Hibernate创建数据库表

[英]Creation of the database tables with Hibernate

人!

我使用Servlets / JBoss / Hibernate / Mysql创建了一个小项目。

我将Hibernate自动生成表。 我的问题仅仅是:这些表何时生成? 当我抬起JBoss或在浏览器中调用servlet时应该创建表吗?

因为我意识到只有在调用我的一个Servlet时才创建它们,并且我想象过当我提升JBoss时将创建它们。

对不起,很傻。

这是我的课:

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

@Entity
@Table(name="estacoes")
public class Estacao {

@Id
@GeneratedValue
private int id;

private String nome;
private String endereco;
private String temperatura;
private String energia;
private String porta;
private String sinal;    
private String bateria;

...getters/setters...

我的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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">

<persistence-unit name="arduinoserver">

    <!-- provedor/implementacao do JPA -->
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>java:jboss/datasources/MysqlDS</non-jta-data-source>

    <!-- entidade mapaeada -->    
    <class>arduinoserver.beans.Estacao</class>

    <properties>
        <!-- propriedades do hibernate -->
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.connection.charSet" value="UTF-8" />
    </properties>
</persistence-unit>

还有我的DAO:

import java.util.List;

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

import arduinoserver.beans.Estacao;

public class EstacaoDAO {

protected EntityManager entityManager;

public EstacaoDAO() {
    entityManager = getEntityManager();
}

private EntityManager getEntityManager() {
    EntityManagerFactory factory =     Persistence.createEntityManagerFactory("arduinoserver");
    if(entityManager == null) {
        entityManager = factory.createEntityManager();
    }

    return entityManager;
}

public Estacao getById(final int id) {
    return entityManager.find(Estacao.class, id);
}

@SuppressWarnings("unchecked")
public List<Estacao> findAll() {
    return entityManager.createQuery("FROM estacoes").getResultList();
}

public void persist(Estacao estacao) {
    try {
        entityManager.getTransaction().begin();
//          entityManager.persist(estacao);
        entityManager.merge(estacao);
        entityManager.getTransaction().commit();
    } catch(Exception ex) {
        ex.printStackTrace();
        entityManager.getTransaction().rollback();
    }
}




}

据我所知,Hibernate是在创建SessionFactory时创建表的。 应用服务器不会自动自行创建一个,因此通常不会在服务器启动时创建表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM