[英]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.