JSF e Hibernate - Hibernate não cria as tabelas automaticamente

Bom dia, estou estudando JSF com o livro Programação Java para Web da NOVATEC.
No livro tem um exemplo de uma aplicação financeira.

Eu estou usando o hibernate.cfg.xml

<!DOCTYPE hibernate-configuration  PUBLIC
"-//Hibernate/Hibernate configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		
		<property name="connection.datasource">java:/comp/env/jdbc/FinanceiroDB</property>		
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="current_session_context_class">thread</property>
		<property name="hibernate.hbm2ddl.auto">update</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
		
		<property name="hibernate.c3p0.min_size">2</property>
		<property name="hibernate.c3p0.max_size">5</property>
		<property name="hibernate.c3p0.timeout">300</property>
		<property name="hibernate.c3p0.max_statements">50</property>
		<property name="hibernate.c3p0.idle_test_period">3000</property>
		
		
		<!-- Classe entidades que devem ser carregadas antes de iniciar o trabalho -->
		<mapping class="br.com.financeiroPessoal.usuario.Usuario"/>
	</session-factory>	
</hibernate-configuration>

Esse é a minha classe entidade

package br.com.financeiroPessoal.usuario;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.*;

import org.hibernate.annotations.NaturalId;

@Entity
public class Usuario 
{
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int codigo;
	private String nome;
	private String email;
	@NaturalId
	private String login;
	private String senha;
	private Date nascimento;
	private String celular;
	private String idioma;
	private boolean ativo;
	
	@JoinTable(name="usuario_permissao",uniqueConstraints={@UniqueConstraint(columnNames={"usuario","permissao"})}, joinColumns=@JoinColumn(name="usuario"))
	@Column(name="permissao")
	private Set<String> permissao = new HashSet<String>();
	
       //get's e set's
		
}

O banco esta criado, o problema é que eu nao sei o que fazer para o hibernate criar as tabelas automaticamente.

Quando estava estudado JSE eu criava uma classe para fazer isso, rodava ela e ela criava as tabelas.

Agora o que eu tenho que fazer ? Criar um arquivo pra rodar antes da aplicação?
Rodar a aplicação no tomcat ?
Preciso de uma ajuda para processeguir.

Esquisito você dizer que não esta criando, porque a propriedade está correta.
O que acontece é que quando você der a criação da SessionFactory ele vai criar as tabelas para você.
Como você usou update na 1 vez ele vai criar as tabelas e depois só vai mudar se você mudar o mapeamento.

eu fazia assim

private static SessionFactory fabrica = new AnnotationConfiguration().configure().buildSessionFactory();

Dependendo da versão pode ser diferente. Que eu saiba na 4 mudou eu acho.
Qualquer coisa posta pergunta aí.

vlw.

Também tenho este livro e tbm estou fazendo a aplicação, porém dei uma parada.

Qualquer coisa dá um toque.

tente trocar a propriedade property name="hibernate.hbm2ddl.auto">update/property
para property name="hibernate.hbm2ddl.auto">create/property

O que eu quero entender é:

Quando o hibernate ira criar as tabelas, em qual momento?

Quanto fizer o Deploy da aplicação?

nao sei dizer ao certo, mas acho que ele cria quando abre a sessao.

Boa tarde Paulo!

O hibernate irá criar as tabelas no momento da criação da SessionFactory. Dependendo como está construída a sua aplicação web, ela só será criada na primeira interação com o banco, e não na exibição da primeira página.

Por exemplo, se você tiver uma primeira página de login que não acessa o banco, apenas exibe um formulário, neste momento ainda não foi criada a SessionFactory. Daí na hora que você digita o login/senha e faz um select no banco, daí a factory será criada e as tabelas criadas.

Isso aí.

Ele vai criar o banco quando vc fizer isso aqui

private static SessionFactory fabrica = new AnnotationConfiguration().configure().buildSessionFactory();

Só tem que ver a sua versão que na 4 a criação da session factory eu acho que mudou.

Aconselho ler o livro java persistence with hibernate.

Muito bom em relação ao hibernate.