Erro ao criar tabela (Hibernate) [Can't create table 'tgajuridico.pessoa' (errno: 150)]

7 respostas
kivervinicius

Ola pessoal, estou enfrentando um problema estranho. eu acabei deletando o banco de dados, e o hibernate estava criando as tabelas para mim, no entanto vi que faltou uma tabela (Pessoa), fui verificar o que havia acontecido e no meu log resulta nisso.

15:03:29,477 ERROR [SchemaUpdate        ] Unsuccessful: create table pessoa (id bigint not null auto_increment, bairro varchar(255), cgc varchar(255), complemento varchar(255), dataCadastro date, email varchar(255), endereco varchar(255), excluido char(1) not null, inativo char(1) not null, nome varchar(255), nomefantasia varchar(255), numero varchar(255), numeroRgIe varchar(255), observacao varchar(255), orgaoExp varchar(255), telefone1 varchar(255), telefone2 varchar(255), telefone3 varchar(255), tipoPessoa varchar(255), cidade_id bigint, estado_id bigint, estadoExpeditor_id bigint, primary key (id)) ENGINE=InnoDB
15:03:29,477 ERROR [SchemaUpdate        ] Can't create table 'tgajuridico.pessoa' (errno: 150)
15:03:29,530 ERROR [SchemaUpdate        ] Unsuccessful: alter table Financeiro add index FKB7BDE6C4D9BA3F5 (pessoa_id), add constraint FKB7BDE6C4D9BA3F5 foreign key (pessoa_id) references pessoa (id)
15:03:29,530 ERROR [SchemaUpdate        ] Can't create table 'tgajuridico.#sql-b80_121d' (errno: 150)
15:03:29,580 ERROR [SchemaUpdate        ] Unsuccessful: alter table ProcessoClientes add index FKD99CB1D94D9BA3F5 (pessoa_id), add constraint FKD99CB1D94D9BA3F5 foreign key (pessoa_id) references pessoa (id)
15:03:29,580 ERROR [SchemaUpdate        ] Can't create table 'tgajuridico.#sql-b80_121d' (errno: 150)
15:03:29,630 ERROR [SchemaUpdate        ] Unsuccessful: alter table ProcessoContrarios add index FKC8B5BADC4D9BA3F5 (pessoa_id), add constraint FKC8B5BADC4D9BA3F5 foreign key (pessoa_id) references pessoa (id)
15:03:29,630 ERROR [SchemaUpdate        ] Can't create table 'tgajuridico.#sql-b80_121d' (errno: 150)
15:03:29,672 ERROR [SchemaUpdate        ] Unsuccessful: alter table ProcessoTestemunhas add index FKF09ED4C74D9BA3F5 (pessoa_id), add constraint FKF09ED4C74D9BA3F5 foreign key (pessoa_id) references pessoa (id)
15:03:29,672 ERROR [SchemaUpdate        ] Can't create table 'tgajuridico.#sql-b80_121d' (errno: 150)
15:03:29,673 ERROR [SchemaUpdate        ] Unsuccessful: alter table pessoa add index FKC4E40FA7CB7EF517 (estadoExpeditor_id), add constraint FKC4E40FA7CB7EF517 foreign key (estadoExpeditor_id) references Estado (id)
15:03:29,673 ERROR [SchemaUpdate        ] Table 'tgajuridico.pessoa' doesn't exist
15:03:29,674 ERROR [SchemaUpdate        ] Unsuccessful: alter table pessoa add index FKC4E40FA7A095D795 (estado_id), add constraint FKC4E40FA7A095D795 foreign key (estado_id) references Estado (id)
15:03:29,674 ERROR [SchemaUpdate        ] Table 'tgajuridico.pessoa' doesn't exist
15:03:29,675 ERROR [SchemaUpdate        ] Unsuccessful: alter table pessoa add index FKC4E40FA716DB16D5 (cidade_id), add constraint FKC4E40FA716DB16D5 foreign key (cidade_id) references Cidade (id)
15:03:29,675 ERROR [SchemaUpdate        ] Table 'tgajuridico.pessoa' doesn't exist

os outros erros são consequencia do primeiro, dai blz, fui ver a minha classe

@Entity
@Table(name="pessoa")
public class Pessoa implements IBean{

	public Pessoa(){
		this.excluido = false;
		this.inativo = false;
		this.dataCadastro = new Date();
	}
	@Id
	@GeneratedValue
	private Long id;

	private String nome;

	private String nomefantasia;

	private String tipoPessoa;

	private String cgc;

	private String numeroRgIe;

	private String orgaoExp;
	
	@Temporal(TemporalType.DATE)
	private Date dataCadastro;

	private String telefone1;

	private String telefone2;

	private String telefone3;

	private String endereco;

	private String numero;

	private String bairro;

	private String complemento;

	private String email;

	@Type(type = "true_false")
	@Column(nullable=false)
	private Boolean inativo;

	@Type(type = "true_false")
	@Column(nullable=false)
	private Boolean excluido;

	private String observacao;

	@ManyToOne
	private Estado estadoExpeditor;

	@ManyToOne
	private Cidade cidade;

	@ManyToOne
	private Estado estado;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getNomefantasia() {
		return nomefantasia;
	}

	public void setNomefantasia(String nomefantasia) {
		this.nomefantasia = nomefantasia;
	}

	public String getTipoPessoa() {
		return tipoPessoa;
	}

	public void setTipoPessoa(String tipoPessoa) {
		this.tipoPessoa = tipoPessoa;
	}

	public String getCgc() {
		return cgc;
	}

	public void setCgc(String cgc) {
		this.cgc = cgc;
	}

	public String getNumeroRgIe() {
		return numeroRgIe;
	}

	public void setNumeroRgIe(String numeroRgIe) {
		this.numeroRgIe = numeroRgIe;
	}

	public String getOrgaoExp() {
		return orgaoExp;
	}

	public void setOrgaoExp(String orgaoExp) {
		this.orgaoExp = orgaoExp;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public String getTelefone1() {
		return telefone1;
	}

	public void setTelefone1(String telefone1) {
		this.telefone1 = telefone1;
	}

	public String getTelefone2() {
		return telefone2;
	}

	public void setTelefone2(String telefone2) {
		this.telefone2 = telefone2;
	}

	public String getTelefone3() {
		return telefone3;
	}

	public void setTelefone3(String telefone3) {
		this.telefone3 = telefone3;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Boolean getInativo() {
		return inativo;
	}

	public void setInativo(Boolean inativo) {
		this.inativo = inativo;
	}

	public Boolean getExcluido() {
		return excluido;
	}

	public void setExcluido(Boolean excluido) {
		this.excluido = excluido;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	public Estado getEstadoExpeditor() {
		return estadoExpeditor;
	}

	public void setEstadoExpeditor(Estado estadoExpeditor) {
		this.estadoExpeditor = estadoExpeditor;
	}

	public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}

	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}
	
	

}

Não encontrei nada errado pois até antes (qndo foi criada a primeira vez) o banco estava correto funcionando.

PS. Outra coisa, todos os relacionamentos agora estão como BIGINT, no qual antes estava com int PS². Tentei criar na mão a tabela pessoa e me da o mesmo erro
/* SQL Error (1005): Can't create table 'tgajuridico.pessoa' (errno: 150)

Foreign key constraint is incorrectly formed */

até criando uma tabela só com o ID, marcando que é innodb o mesmo ja acusa o erro, coisa que nem tem FK ainda.

:?

7 Respostas

Hebert_Coelho

Cara, tenta mudar de bigint para int e veja se funciona algo.

Você simplesmente não pode mudar os campos da tabela assim não mano. Tu pode lascar o JPA.

kivervinicius

E ai jake, como sempre dando atenção, rs,

cara eu tava tentando fazer direto pelo banco, para ver se encontrava o erro, mas ja coloquei tudo como int, e nada, não da de entender. simplesmente não funciona.

tanto que fiz a mesma configuração rodar o script

CREATE TABLE pessoa ( id BIGINT NOT NULL auto_increment, bairro VARCHAR(255), cgc VARCHAR(255), complemento VARCHAR(255), datacadastro DATE, email VARCHAR(255), endereco VARCHAR(255), excluido CHAR(1) NOT NULL, inativo CHAR(1) NOT NULL, nome VARCHAR(255), nomefantasia VARCHAR(255), numero VARCHAR(255), numerorgie VARCHAR(255), observacao VARCHAR(255), orgaoexp VARCHAR(255), telefone1 VARCHAR(255), telefone2 VARCHAR(255), telefone3 VARCHAR(255), tipopessoa VARCHAR(255), PRIMARY KEY (id) ) engine=innodb

renomeei para pessoa1, e passa. e ai é macumba? rs

EDIT

O interessante que mudei o dialect só para MysqlDialect e ele funciona mas ele cria assim…

“SÓ” essa tabela vira MyISAM o resto continua como innodb,

e da esses erros agora;

15:48:46,733 ERROR [SchemaUpdate ] Unsuccessful: alter table Financeiro add index FKB7BDE6C4D9BA3F5 (pessoa_id), add constraint FKB7BDE6C4D9BA3F5 foreign key (pessoa_id) references pessoa (id) 15:48:46,733 ERROR [SchemaUpdate ] Can't create table 'tgajuridico.#sql-b80_12cd' (errno: 150) 15:48:46,837 ERROR [SchemaUpdate ] Unsuccessful: alter table ProcessoClientes add index FKD99CB1D94D9BA3F5 (pessoa_id), add constraint FKD99CB1D94D9BA3F5 foreign key (pessoa_id) references pessoa (id) 15:48:46,837 ERROR [SchemaUpdate ] Can't create table 'tgajuridico.#sql-b80_12cd' (errno: 150) 15:48:46,914 ERROR [SchemaUpdate ] Unsuccessful: alter table ProcessoContrarios add index FKC8B5BADC4D9BA3F5 (pessoa_id), add constraint FKC8B5BADC4D9BA3F5 foreign key (pessoa_id) references pessoa (id) 15:48:46,915 ERROR [SchemaUpdate ] Can't create table 'tgajuridico.#sql-b80_12cd' (errno: 150) 15:48:47,007 ERROR [SchemaUpdate ] Unsuccessful: alter table ProcessoTestemunhas add index FKF09ED4C74D9BA3F5 (pessoa_id), add constraint FKF09ED4C74D9BA3F5 foreign key (pessoa_id) references pessoa (id) 15:48:47,007 ERROR [SchemaUpdate ] Can't create table 'tgajuridico.#sql-b80_12cd' (errno: 150)

as tabelas que estão relacionadas fumam…

LPJava

a mensagem é que o hibernate n conseguiu criar a tabela, verifica teu arquivo .cfg.xml e garante que o usuario tem permissao de escrita no banco. Se tiver usando o eclipse abre o arquivo de config do hibernate e lá tem uma parte onde tu informa que deve create a tabela, dai tu coloca create ou auto.

kivervinicius

Ja está feito todos esses procedimentos, ja se encontra na cfg.xml

:frowning: ja tentei de qse tdo e nada.

drsmachado

Olhando pelo erro, caí no Stackoverflow e encontrei isso

Ou seja, o problema pode ter sido originado por você ter criado e apagado as tabelas e estar tentando recriá-las.

Eu não sei se você já fez ou se possui esta possibilidade, mas eu droparia o banco e recriaria o mesmo.
Antes de mandar o hibernate criar tudo de novo, alteraria o dialect de MySQLDialect para MySQLInnoDBDialect, forçando a trabalhar com InnoDB.

kivervinicius

Ola, obrigado pela atenção,

Sim há a possibilidade, tanto que ja o fiz, o que acontece dai é que ele não cria, se eu manter sem o innodb ele cria todas como inno e só essa como myisam,

comportamento totalmente anormal :S

LPJava

se tu tiver usando o MySqlDialect, troca ele para o MySql5InnoDBDialect são diferentes. Dar uma pesquisada que tu vai as diferenças entre eles.

Criado 6 de junho de 2012
Ultima resposta 9 de jun. de 2012
Respostas 7
Participantes 4