[RESOLVIDO] Configuração Hibernate + Criação de Banco

Eu comecei a fazer minha aplicação 100% JDBC, mas como decidi que teria que aprender Hibernate mais cedo ou mais tarde resolvi migrar no meio do projeto, mas estou tendo alguns problemas.
1 - Como eu crio o banco via Hibernate? Pois eu criava com JDBC e começou a dar um erro estranho. Algo do tipo “the application must supply JDBC connections”, e um amigo disse que eu deveria escolher apenas 1 API pra trabalhar… Ou 100% JDBC ou 100% Hibernate, mas eu não sei como eu crio o banco por Hibernate. Eu pesquisei sobre a propriedade hbm2ddl.auto, mas ainda não entendo como utilizá-la.
2 - Eu estou trabalhando com perfis. O usuário escolhe um perfil, e cada perfil tem um banco de dados próprio, que eu gostaria que o Hibernate criasse quando um perfil é cadastrado pelo usuário. O problema é que isso geraria várias URLs diferentes na hora de configurar o Hibernate, o que não é possível fazer com um .xml. Como eu poderia fazer pra configurar a URL dinamicamente a partir de uma variável (perfilAtual) que eu tenho em todos os meus JFrames?

Eu posso ter um XML assim:

[code]<?xml version="1.0" encoding="UTF-8"?>

org.apache.derby.jdbc.EmbeddedDriver APP org.hibernate.dialect.DerbyDialect //create [/code]

e criar a Factory assim? :

SessionFactory fabrica = new Configuration().configure("hibernate.cfg.xml").setProperty("hibernate.connection.url", "jdbc:derby:" + configAlimentos.systemDir + "DietManager").buildSessionFactory(); Session sessao = fabrica.openSession();

Porque dessa foram não está funcionando, só funciona se eu deixo “.configure()”, sem o arquivo que eu desejo utilizar. E eu precisava definir qual arquivo de configuração eu quero usar, porque na hora de cadastrar perfis eu estou usando outro XML chamado “creation.cfg.xml”, que seta a propriedade.

Obrigado pela atenção

vou dar um boi para você huahuhuhha

vou te passa o arquivo hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
       <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
       <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/seuBD</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>--> 
	<property name="current_session_context_class">thread</property>
       
        <!-- Cria as tabelas no banco de dados -->
	<property name="hibernate.hbm2ddl.auto">update</property>
        <!-- Sql Show -->
	<property name="show_sql">true</property>
	<property name="format_sql">true</property>
         <!-- Todas as classes que sao persistida no sistema -->
        <mapping class="br.com.aplicacao.Usuario"/>
        <mapping class="br.com.aplicacao.Endereco"/>
        
    </session-factory>
</hibernate-configuration>

Seu hibernateUtil - que vai ler seu arquivo hibernate.cfg.xml com isso
vc vai ter uma fabrica de conexoes falando a grosso modo

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

	private static final SessionFactory	sessionFactory	= buildSessionFactory();

	private static SessionFactory buildSessionFactory() {
		try {
			AnnotationConfiguration cfg = new AnnotationConfiguration();
			cfg.configure("hibernate.cfg.xml");
			return cfg.buildSessionFactory();
		} catch (Throwable e) {
			System.out.println("Criação inicial do objeto SessionFactory falhou. Erro: " + e);
			throw new ExceptionInInitializerError(e);
		}
	} 

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
}
  • Eu prefiro criar o database no banco de dados e deixar a opção “hibernate.hbm2ddl.auto” como update
    so crie o banco o resto ele faz por vc.

Se aparecer mais duvida post ai

flw

O meu problema é exatamente esse… eu quero que O HIBERNATE CRIE O BANCO… pois cada perfil que o usuário criar vai usar um banco diferente… então independe de mim, depende da APLICAÇÃO EM SI a criação da base de dados, entende?

E o que faz o “hibernate.hbm2ddl.auto” como update ?

ficou meio confuso

pq vc vai ter um Database ja configurado no hibernate.cfg.xml
e vc esta me falando que ele vai criar bancos? estranho

desse jeito que eu te enviei ele vai adicionar tabelas conforme vc vai criando entidades persistidas

mas em todo caso:

segue abaixo as opções

hibernate.hbm2ddl.auto create-drop – Esse cria mas depois que vc encerra o servidor ele exclui esse é mais voltado para teste
hibernate.hbm2ddl.auto create —Esse é o cara que cria
hibernate.hbm2ddl.auto update
hibernate.hbm2ddl.auto validate

ve se é isso que vc quer

flw

Eu preciso que cada usuário que se cadastre tenha conteúdo próprio, e eu achei que a melhor forma de fazer isso fosse criar uma pasta e um banco separado pra cada um. Mas eu não sei como fazer uma configuração dinâmica pro Hibernate pra ir mudando a URL conforme o perfil que o usuário escolhe muda, entende?

Tipo, eu o joão e a maria se cadastram. Quando o joão entra ele tem que ver só as coisas que ele fez no programa, e o mesmo pra maria, então eu pensei em criar 2 bancos. Tem forma melhor de fazer isso? com 1 só banco?

nao é por ai

Pelo que eu acabei de entender
vc quer o seguinte:

Cada usuario que se cadastrar vai ter seu perfil e suas coisas
ou podera add coisas novas ao longo do tempo.

Tira essa ideia de criar um banco para cada um usuário
vc vai ter que trabalhar permissão…
assim qdo o usuario logar ele vai ter acesso a isso e aquilo
dependendo do seu papel(Role) dentro da sua aplicação.

Certo. É exatamente isso que eu quero fazer, só não sei como fazer. Tipo eu posso ter 2 usuários cadastrando o mesmo produto, como eu faria pra discriminar qual produto é de quem NA MESMA TABELA? Valew aí!

Eu só gostaria que alguém me informasse claramente como criar o banco com o Hibernate, pois é o que terá que acontecer caso eu deseje distribuir a aplicação. Eu precisaria que a própria aplicação gerasse o banco.

No início da aplicação eu verifico se já existe um banco de dados criado, se não existir, tem como eu configurar uma fábrica com “creation.cfg.xml” (que usa hibernate.hbm2ddl.auto create) pra criar, e daí em diante usar o “hibernate.cfg.xml” com hibernate.hbm2ddl.auto update só pra gerenciar o banco?

Porque quando eu faço

ou

ele diz que não encontra um driver “suitable”.

Mas quando eu faço

(sem nada de parâmetro) ele funciona, suponho que ele crie pelo “hibernate.cfg.xml” como padrão.
Bom… Muito obrigado.

teve um carinha com essa msma ideia sua aqui no forum
e ele mudou de ideia, talvez isso te ajude

http://www.guj.com.br/java/198552-resolvido-mesmo-banco-de-dados-com-varios-usuarios

Infelizmente não serviu, porque o dele é pra Web, e eu não entendo nada de Java voltado para Web hehe
E ele também usou Annotations que eu não sei usar.

Mas eu optei por adicionar um atributo/campo “usuário” nas tabelas pra descriminar o que é de quem.
Muito obrigado pela ajuda!