Recriar tabelas com NetBeans e JPA2

22 respostas
Edison_Martins

Pessoal, tenho um sistema onde eu trabalho que possui uma tabela com o nome da coluna errado.

Era para ser [color=green]ID_EMPRESA[/color], porém está [color=red]ID_EMRESA[/color].

Eu alterei o persistence.xml

para

mas o netbeans não permite isso e ele altera para

E ao roda o sistema ele não faz as minhas alterações.

Gostaria de saber como faço para o NetBeans 7.2.1 apagar todas as tabelas e criá-las novamente???

SGBD: SqlServer2008

22 Respostas

kdoigor
R

Cara, pelo amor de Deus, cuidado com o create, create-drop e etc, isso ai vai apagar tudo do teu banco mano.

Uma dica ? não é só uma coluna ? Faz na mão uai:

ALTER TABLE empresa RENAME id_emresa  TO id_empresa;

Dependendo do banco o sql muda, mas é por ai.

Melhor do que ficar mexendo no banco todo, depois so muda nas classes java.

Flw!!

Edison_Martins

Não seria

<property name="hibernate.hbm2ddl.auto" value="create-drop"/> ???

De qualquer forma as duas maneiras não funcionam!!!

Agradeço a ajuda!

O erro que dá é esse:

Caused by: org.hibernate.MappingException: Unable to find column with logical name: ID_EMRESA in org.hibernate.mapping.Table(GESTOR.dbo.TB_EMPRESA) and its related supertables and secondary tables

Edison_Martins

Mano, é exatamente o que eu quero. Apgar tudo e criar de novo.

O sistema ainda está em desenvolvimento. Eu peguei ele em andamento.

Eu não quero usar o comando SQL, pois quero aprender a fazer isso no NetBeans. No eclipse é só mudar para create, mas no netbeans é tudo mais burocrático!

R

Aaaaaa taaa…entao ta bom :slight_smile:

Tipo, esse erro:

Caused by: org.hibernate.MappingException: Unable to find column with logical name: ID_EMRESA in org.hibernate.mapping.Table(GESTOR.dbo.TB_EMPRESA) and its related supertables and secondary tables

Significa dizer que o hibernate nao esta encontrando o atributo ID_EMRESA, no squema tal na tabela tal… verifica se ele ja nao mudou la no seu banco =D

R

Edison Martins:
Pessoal, tenho um sistema onde eu trabalho que possui uma tabela com o nome da coluna errado.

Era para ser [color=green]ID_EMPRESA[/color], porém está [color=red]ID_EMRESA[/color].

Eu alterei o persistence.xml

para

mas o netbeans não permite isso e ele altera para

E ao roda o sistema ele não faz as minhas alterações.

Gostaria de saber como faço para o NetBeans 7.2.1 apagar todas as tabelas e criá-las novamente???

SGBD: SqlServer2008

Como assim o Netbeans nao deixa alterar ? Ele deixa voce mudar a string e salvar pelo menos ? ou nem mexer nas palavras ele deixa ?

Edison_Martins

rof20004:
Aaaaaa taaa…entao ta bom :slight_smile:

Tipo, esse erro:

Caused by: org.hibernate.MappingException: Unable to find column with logical name: ID_EMRESA in org.hibernate.mapping.Table(GESTOR.dbo.TB_EMPRESA) and its related supertables and secondary tables

Significa dizer que o hibernate nao esta encontrando o atributo ID_EMRESA, no squema tal na tabela tal… verifica se ele ja nao mudou la no seu banco =D

No banco está ID_EMRESA. O hibernate não mudou não.

Edison_Martins

Netbeans deixa eu alterar as classes normalmente, mas ele não faz as alterações no banco.

Eu modifiquei o campo [color=red]ID_EMRESA[/color] para [color=green]ID_EMPRESA[/color], mas no banco continua [color=red]ID_EMRESA[/color].

R

To falando do XML , pelo que voce falou ele nao permite voce alterar o XML, é isso mesmo ?

Edison_Martins
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
  <persistence-unit name="GerenciaProjetosPU" transaction-type="RESOURCE_LOCAL">
    
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    
    <shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.format_sql" value="true"/>
      <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost:1433;databaseName=GESTOR"/>
      <property name="javax.persistence.jdbc.password" value="******"/>
      <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
      <property name="javax.persistence.jdbc.user" value="sa"/>
      <property name="javax.persistence.jdbc.show_sql" value="true"/>
      <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
    </properties>
    
  </persistence-unit>
</persistence>
Edison_Martins

Ele permite, mas o netbeans possui a guia DESIGN que é uma interface para o persistence.xml. E eu não entendo muito desse DESIGN. E vou direto para o código-fonte, porém o auto-complete do

não mostra a opção create, apenas create-drop.

R

Certo, mas da pra mudar entao ne ? So isso que quero saber, porque nunca aconteceu isso comigo ao usar o netbeans.

Edison_Martins

Dá sim, mas ao executar o sistema ele não faz as alterações como é no Eclipse.

R

hummm, poste seu persistence.xml todo ? nao se esqueça e apagar os dados confidenciais. Outra coisa, qual hibernate voce ta usando ? Outra coisa, o usuario que voce esta usando no persistence para acessar o banco, TEM ACESSO a escrita ? ainda tem essa, hehehehehe =D

Edison_Martins
rof20004:
hummm, poste seu persistence.xml todo ? nao se esqueça e apagar os dados confidenciais. Outra coisa, qual hibernate voce ta usando ? Outra coisa, o usuario que voce esta usando no persistence para acessar o banco, TEM ACESSO a escrita ? ainda tem essa, hehehehehe =D
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
  <persistence-unit name="GerenciaProjetosPU" transaction-type="RESOURCE_LOCAL">
    
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>br.com.managedBean.ProjetoBean</class>
    <class>br.com.entity.TbContrato</class>
    <class>br.com.entity.TbOrdemServico</class>
    <class>br.com.entity.TbUsuario</class>
    <class>br.com.entity.TbProjeto</class>
    <class>br.com.entity.TbTipoDocumento</class>
    <class>br.com.entity.TbDocumentoOs</class>
    <class>br.com.entity.TbEmpresa</class>
    <class>br.com.entity.TbUnidadeMetrica</class>
    <class>br.com.entity.TbTipoFiscal</class>
    <class>br.com.entity.TbClassificacaoSolicitacao</class>
    <class>br.com.entity.TbInformacoesFinanceiras</class>
    <class>br.com.entity.TbNotaFiscal</class>
    <class>br.com.entity.TbFiscais</class>
    <class>br.com.entity.TbPontoFuncao</class>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.format_sql" value="true"/>
      <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost:1433;databaseName=GESTOR"/>
      <property name="javax.persistence.jdbc.password" value="******"/>
      <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
      <property name="javax.persistence.jdbc.user" value="sa"/>
      <property name="javax.persistence.jdbc.show_sql" value="true"/>
      <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
    </properties>
    
  </persistence-unit>
</persistence>

hibernate 4.1.8

Usuário "SA" que é o padrão do sqlServer2008 - Include e Update funcionando normalmente.

Estou investigando se ele pode dropar e criar tabelas.

R

ta, sei que voce ja testou, mas corrige isso:

o certo o é create-drop

Cara, entao vou da uma pesquisada aqui.

R

Outra coisa, nao aparece nada no log nao (console do servidor)? deve ter alguma coisa la que ajude.

Edison_Martins

Caused by: org.hibernate.MappingException: Unable to find column with logical name: ID_EMRESA in org.hibernate.mapping.Table(GESTOR.dbo.TB_EMPRESA) and its related supertables and secondary tables at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:552) at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:257) at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:116) at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1525) at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1446) at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1351) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737) at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)

R

Isso ai é a mensagem que diz que nao foi encontrado ID_EMRESA nas classes, se voce voltar ao nome errado funciona certo ? to achando que isso ai que tu ta passando é erro de permissao no banco cara, sério, que coisa estranha.

Edison_Martins

Exatamente isso, eu criei um novo usuário com todos direitos possíveis e nada.

kdoigor

da um drop database direto no banco e ja era.

Edison_Martins

Se eu não achar nada mais “elegante”, será isso mesmo que irei fazer.

Criado 8 de março de 2013
Ultima resposta 8 de mar. de 2013
Respostas 22
Participantes 3