Hibernate JPA não cria todas Tabelas no banco dados [RESOLVIDO]

Pessoal, bom dia.
Preciso de ajuda da comunidade.
Estou com um problema ao gerar tabelas no banco de dados do oracle usando Hibernate / JPA.

Vamos lá,
O banco de dados existe, já está tudo ok, a comunicação existe também. Como sei disso?
Algumas tabelas são criadas, na verdade 9/11

Duas classes não conseguem gerar a tabelas, sendo elas ‘Pessoas’ e ‘Produto’.

Habilitei para mostrar o codigo sql do hibernate e tudo parece estar certo, existe algum log a mais que posso habilitar na configuração ?

Não existe outra tabela/view com o nome da tabela.

Segue meu config do hibernate:

    <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
	<property name="hibernate.connection.datasource">java:/comp/env/jdbc/datasource</property>
	<property name="hibernate.default_schema">XXX</property>
	<property name="hibernate.current_session_context_class">thread</property>
	<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
	<property name="hibernate.jdbc.factory_class">org.hibernate.jdbc.NonBatchingBatcherFactory</property>
	<property name="hibernate.jdbc.batch_size">100</property>
	<property name="hibernate.cache.use_second_level_cache">true</property>
	<property name="hibernate.transaction.auto_close_session">true</property>
	<property name="hibernate.hbm2ddl.auto">update</property>
	<property name="hibernate.show_sql">true</property>
	<property name="hibernate.format_sql">true</property>
	<property name="hibernate.generate_statistics">false</property>
	<property name="hibernate.use_sql_comments">false</property>
	<property name="hibernate.connection.autocommit">false</property>
	<property name="hibernate.connection.pool_size">50</property>

Uma das classes que não funcionaram:

@Audited
@Entity
@Table(name = "w_pessoa")
@SequenceGenerator(name = "w_pessoa_seq", sequenceName = "w_pessoa_seq", initialValue = 1, allocationSize = 1)
public class Pessoa implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "w_pessoa_seq")
@SequenceGenerator(name = "w_pessoa_seq", sequenceName = "w_pessoa_seq", allocationSize = 1, initialValue = 1)
private Long pes_codigo;

@Column(length = 150, nullable = false)
private String pes_nome;

@Column(length = 150, nullable = true)
private String pes_razao;

@Column(nullable = true)
private Boolean pes_cliente = false;

@Column(nullable = true)
private Boolean pes_fornecedor = false;

@Column(nullable = true)
private Boolean pes_tranportadora = false;

@Column(nullable = true)
private Boolean pes_outro = false;

@Column(nullable = true)
private Boolean pes_funcionario = false;

@Column(nullable = true)
private Boolean pes_usuario = false;

@Column(nullable = true)
private Boolean pes_vendedor = false;

@Column(nullable = true)
private Boolean pes_comprador = false;

@Column(nullable = true)
private Boolean pes_ativo = true;

@Column(length = 20)
private String pes_tipo_pessoa = "Juridica";

@Column(length = 20)
private String pes_cep;

@Column(length = 100)
private String pes_endereco;

@Column(length = 100)
private String pes_end_numero;

@Column(length = 50)
private String pes_complemento;

@Column(length = 50)
private String pes_bairro;

@Column(length = 50)
private String pes_cidade;

@Column(length = 50)
private String pes_uf;

@Column(length = 16)
private String pes_fone;

@Column(length = 16)
private String pes_fone2;

@Column(length = 15)
private String pes_fax;

@Column(length = 17)
private String pes_celular;

@Column(length = 17)
private String pes_celular2;

@Column(length = 80)
private String pes_contato;

@Column(length = 17)
private String pes_cel_contato;

@Column(length = 100)
private String pes_emailcontato;

@Column(length = 100)
private String pes_email;

@Column(length = 100)
private String pes_emailmovimento;

@Column(length = 100)
private String pes_pathPhoto;

@Column(columnDefinition = "text")
private String pes_observacao;

@Column(length = 19)
private String pes_cnpj;

@Column(length = 19)
private String pes_ie;

@Column(length = 15)
private String pes_cpf;

@Column(length = 15)
private String pes_rg;

@Column(scale = 4, precision = 15)
private BigDecimal pes_desconto_padrao = BigDecimal.ZERO;

@Column(nullable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date pes_datacadastro = new Date();

@Temporal(TemporalType.DATE)
private Date pes_datanascimento;

@Column(length = 1)
private String pes_sexo;

@Column(length = 20, nullable = true, unique = true)
private String pes_login = null;

@Column(length = 20, nullable = true)
private String pes_senha = null;

@Temporal(TemporalType.TIMESTAMP)
private Date pes_ultimoacesso;

@Column(length = 100)
private String ent_pathPhoto;

    *Getters e setters*

Bom dia amigo.

Vi que você está utilizando um banco de dados da Oracle, as tabelas muitas vezes não são criadas por erros na anotações e quando isso ocorre o framework para na tabela que deu erro na sequência de declaração das classes de entidade, nessa classe eu vi que você usou a anotação GeneratedValue duas vezes, não há necessidade disso, tem um campo de data sem a anotação de coluna pes_datanascimento e tem vários campos do tipo booleano (tive problemas para criar campos assim) geralmente eu coloco uma definição para coluna Column(name = “Coluna_1”, columnDefinition = “boolean”) .

Os erros de criação de tabela não são isolados e nem destacados pelo framework, você precisa ver todo o código gerado pelo hibernate para encontrar os problemas.

Espero ter ajudado! :smiley:

1 curtida

Cria as tabelas sob demanda e sob seu controle, senão vai ficar quebrando a cabeça com n configurações por uma questão tão simples no dia a dia, como criação de tabela.

Tirei a maioria dos campos e foi. Vou verificar um a um pra ver qual é o causador do problema e volto aqui pra esclarecer.

Os campos booleanos não tive problema, sobre os campos sem anotação, eu nem tinha reparado…rs… Obg pela dica, logo mais volto com resultados dos testes.

Na vdd essas classes estavam todas funcionando no mysql, quando migrei as mesmas para o oracle que aconteceu isso. Mas é boa sua dica, vou refazer as classes com problema.

vlw amigo.

Caso você troque de banco de dados com certa frequência eu aconselho usar uma ferramenta de controle de versionamento com essa finalidade, eu aconselho usar o Flyway se for para escrever o código SQL de criação das tabelas.

Eu utilizo o controle de versionamento oferecido pela Oracle e atualmente estou trabalhando com bancos de dados paralelos em um mesmo sistema sendo eles Oracle, Derby e Mongo. As classes de entidade compartilhadas entre Oracle e Derby nunca deram nenhum problema de migração e anteriormente eu estava utilizando o MySql no lugar do Derby.

1 curtida

Primeiramente quero agradecer aos amigos pela ajuda prestada.
Acabei descobrindo a incompatibilidade do oracle com a [ columnDefinition = “text” ]

O problema estava em:

    @Column(columnDefinition = "text")
    private String pes_observacao;

Resolvi usando @Lob para os campos de textos grandes, ficando:

    @Lob
    @Column(nullable = true)
    private String pes_observacao;

:wink:

1 curtida