Fórum Criar banco via JPA #421616

14/08/2012

0

Boa noite pessoal, alguém sabe como posso executar um comando create database teste, via JPA, ou algum comando que faça isto nativo sem precisar do SQL puro.

Desde já agradeço a atenção.
Fernando Silva

Fernando Silva

Responder

Posts

15/08/2012

Robson Teixeira

cara acho que você deve executar nativo o create database pois so sei que da para mandar o JPA criar as tabelas mas o banco eu normalmente executo o comando create database.

att
robson
Responder

Gostei + 0

15/08/2012

Fernando Silva

Ok, o que eu quero é que via programação eu crie este banco, vou estar conectado em um banco, e ao clicar em um botão criar outros.
Você tem algum exemplo ai
Responder

Gostei + 0

16/08/2012

Davi Costa

Existe um atributo de configuração do hibernate:

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

Este valor update vai gerar a primeira vez e sempre que alterar o mapeamento de suas entidades ele vai atualizar as colunas do banco.

Esta forma que coloquei acima pode variar um pouco dependendo da forma e das versões do hibernate.

att Davi
Responder

Gostei + 0

16/08/2012

Fernando Silva

Olá Davi não entendi bem o que você me explicou, mas vou postar meu código pra vocês entenderem melhor o que eu quero.
Meu sistema terá um banco pra cada cliente, e este banco não quero criar manual e sim via sistema, irei criar só o banco administrativo manual, os dos clientes via sistema.
Eis o código:
    public void criarBanco(AdmsisContratos1 _contrato) throws EncryptorException {
        EntityManager em = JPAUtil.getInstace().createEntityManager();  
        try {
            //
            em.getTransaction().commit();
            String sql = "create database "+ _contrato.getIdnomeconta1().trim()+
                        " with owner = postgres "+
                        " encoding  = 'UTF8' "+
                        " tablespace = pg_default "+
                        " lc_collate = 'Portuguese_Brazil.1252' "+
                        " lc_ctype  = 'Portuguese_Brazil.1252' "+
                        " connection limit = -1;";
            Query query = em.createNativeQuery(sql);
            query.executeUpdate();
            //em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }
Responder

Gostei + 0

18/08/2012

Davi Costa

Vc está reiventandop a roda, pq não pesquisa por hibernate.hbm2ddl.auto

att Davi
Responder

Gostei + 0

20/08/2012

Fernando Silva

Davi, não entendi seu comentário, ou você não entendeu minha necessidade.
Eu quero criar o banco via programação pois irei ter vários bancos, é um sistema ERP cada cliente 1 banco de dados.
As tabelas serão geradas automaticamente, através da configuração do percistence.xml (eclipselink.ddl-generation), meu problema não em criar as tabelas e sim criar o banco de dados, pois preciso de um banco pra criar as tabelas.
Entendeu?


Responder

Gostei + 0

20/08/2012

Davi Costa

Hm, agora entendi. Ai vai depender um pouco do banco que vai utilizar,
por exemplo no postgres vc deve se conectar no banco postgres que é default e owner e criar o seu banco.
Só que vai ter que ter cuidado nas configurações da sua app na primeira ver que subir a aplicação, mas na maioria dos casos o JPA já se conecta com o banco que a app vai utilizar.

att Davi
Responder

Gostei + 0

22/08/2012

Fernando Silva

Então Davi como você entendeu, será que eu postando o erro você me ajuda, pelo que entendi é que JPA esta abrindo uma transação e estes comandos "ddl", não executa dentro da transação, fechei a transação e tentei executar mas também não deu eis o erro:

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERRO: CREATE DATABASE não pode executar dentro de um bloco de transação
Error Code: 0
Call: create database supervi with owner = postgres  encoding  = 'UTF8'  tablespace = pg_default  lc_collate = 'Portuguese_Brazil.1252'  lc_ctype  = 'Portuguese_Brazil.1252'  connection limit = -1;
Query: DataModifyQuery(sql="create database supervi with owner = postgres  encoding  = 'UTF8'  tablespace = pg_default  lc_collate = 'Portuguese_Brazil.1252'  lc_ctype  = 'Portuguese_Brazil.1252'  connection limit = -1;")
Responder

Gostei + 0

23/08/2012

Davi Costa

Em qual banco do seu postgres vc se conectou?

att Davi
Responder

Gostei + 0

23/08/2012

Fernando Silva

Então Davi, eu tenho um banco que criei na mão mesmo (via console do banco), ou seja ele sempre vai existir e me conecto nele, chama-se "commit".
Fernando.
Responder

Gostei + 0

23/08/2012

Davi Costa

mas é interessante que vc se conecte no banco postgres para fazer, mas de qualquer forma parece se erro de sql mesmo, evolui aos poucos.
que tal começar apenas por um create database, para ver se funciona.
Se ainda der problemas o ideal é criar uma conexão jdbc mesmo só para fazer isso. resolve seu problema.

att Davi
Responder

Gostei + 0

25/08/2012

Fernando Silva

Opa Davi, fiz com o JDBC mesmo, deu certo.
Quando eu descobrir a solução no "JPA" coloco nele.

Obrigado a todos

Fernando Luiz.
Responder

Gostei + 0

27/08/2012

Davi Costa

Fiz uns testes aqui e a melhor implementação que eu consegui, foi passar a conection para o jdbc, para não ter que implementar denovo a conexão com o banco e executar via jdbc.

att Davi
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar