Criar banco via JPA
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.
Desde já agradeço a atenção.
Fernando Silva
Curtidas 0
Respostas
Robson Teixeira
14/08/2012
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
att
robson
GOSTEI 0
Fernando Silva
14/08/2012
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
Você tem algum exemplo ai
GOSTEI 0
Davi Costa
14/08/2012
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
<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
GOSTEI 0
Fernando Silva
14/08/2012
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:
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();
}
}
}
GOSTEI 0
Davi Costa
14/08/2012
Vc está reiventandop a roda, pq não pesquisa por hibernate.hbm2ddl.auto
att Davi
att Davi
GOSTEI 0
Fernando Silva
14/08/2012
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?
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?
GOSTEI 0
Davi Costa
14/08/2012
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
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
GOSTEI 0
Fernando Silva
14/08/2012
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;")
GOSTEI 0
Davi Costa
14/08/2012
Em qual banco do seu postgres vc se conectou?
att Davi
att Davi
GOSTEI 0
Fernando Silva
14/08/2012
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.
Fernando.
GOSTEI 0
Davi Costa
14/08/2012
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
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
GOSTEI 0
Fernando Silva
14/08/2012
Opa Davi, fiz com o JDBC mesmo, deu certo.
Quando eu descobrir a solução no "JPA" coloco nele.
Obrigado a todos
Fernando Luiz.
Quando eu descobrir a solução no "JPA" coloco nele.
Obrigado a todos
Fernando Luiz.
GOSTEI 0
Davi Costa
14/08/2012
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
att Davi
GOSTEI 0