Erro no hibernata + postgres (ERRO: operador não existe: integer = character varying)

6 respostas
S

Quando tento acessar a aplicação é mostrado esse erro, já procurei pelas classes mas n achei onde pode está alguma atributo com tipos diferentes, coloquei o Log4j mas tb n achei.

Se algum puder me ajuda - Console:

Hibernate: select login0_.usuario as usuario8_1_, login0_.Funcionario_Pessoa_idPessoa as Funciona4_8_1_, login0_.grupo as grupo8_1_, login0_.senha as senha8_1_, funcionari1_.idPessoa as idPessoa0_0_, funcionari1_1_.celular as celular0_0_, funcionari1_1_.cep as cep0_0_, funcionari1_1_.cidade as cidade0_0_, funcionari1_1_.estado as estado0_0_, funcionari1_1_.numero_imovel as numero6_0_0_, funcionari1_1_.rua as rua0_0_, funcionari1_1_.telefone as telefone0_0_, funcionari1_.data_admissao as data1_5_0_, funcionari1_.funcao as funcao5_0_, funcionari1_.matricula as matricula5_0_, funcionari1_.nome as nome5_0_, funcionari1_.status_funcao as status5_5_0_ from Login login0_ left outer join Funcionario funcionari1_ on login0_.Funcionario_Pessoa_idPessoa=funcionari1_.idPessoa left outer join Pessoa funcionari1_1_ on funcionari1_.idPessoa=funcionari1_1_.idPessoa where login0_.usuario=?
Hibernate: select login0_.usuario as usuario8_1_, login0_.Funcionario_Pessoa_idPessoa as Funciona4_8_1_, login0_.grupo as grupo8_1_, login0_.senha as senha8_1_, funcionari1_.idPessoa as idPessoa0_0_, funcionari1_1_.celular as celular0_0_, funcionari1_1_.cep as cep0_0_, funcionari1_1_.cidade as cidade0_0_, funcionari1_1_.estado as estado0_0_, funcionari1_1_.numero_imovel as numero6_0_0_, funcionari1_1_.rua as rua0_0_, funcionari1_1_.telefone as telefone0_0_, funcionari1_.data_admissao as data1_5_0_, funcionari1_.funcao as funcao5_0_, funcionari1_.matricula as matricula5_0_, funcionari1_.nome as nome5_0_, funcionari1_.status_funcao as status5_5_0_ from Login login0_ left outer join Funcionario funcionari1_ on login0_.Funcionario_Pessoa_idPessoa=funcionari1_.idPessoa left outer join Pessoa funcionari1_1_ on funcionari1_.idPessoa=funcionari1_1_.idPessoa where login0_.Funcionario_Pessoa_idPessoa=?
2010-11-09 05:47:19,859 (JDBCExceptionReporter.java:100)  WARN - SQL Error: 0, SQLState: 42883
2010-11-09 05:47:19,859 (JDBCExceptionReporter.java:101) ERROR - ERRO: operador não existe: integer = character varying
09/11/2010 05:47:19 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet LoginServlet threw exception
org.hibernate.exception.SQLGrammarException: could not load an entity: [model.Login#1]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:1895)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71)
	at org.hibernate.loader.entity.EntityLoader.loadByUniqueKey(EntityLoader.java:108)
	at org.hibernate.persister.entity.AbstractEntityPersister.loadByUniqueKey(AbstractEntityPersister.java:1672)
	at org.hibernate.type.EntityType.loadByUniqueKey(EntityType.java:641)
	at org.hibernate.type.EntityType.resolve(EntityType.java:415)
	at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:139)
	at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:877)
Classe fncionario
@Entity
@Table(name="Funcionario") 
@PrimaryKeyJoinColumn(name = "idPessoa")
@SequenceGenerator(name="seq_funcionario",sequenceName="seq_funcionario")
public class Funcionario extends Pessoa implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -7719836671125030299L;
	
	@Column(name="matricula", unique=true)
	@GeneratedValue(generator="seq_funcionario",strategy = GenerationType.AUTO)
	private int matricula;

	@Column(name="data_admissao")
	@Temporal(TemporalType.DATE) 
	private Date data_admissao;
		
	@Column(name="status_funcao")
	private String status_funcao;
	
	@Column(name="nome")
	private String nome;

	@Column(name="funcao")
	private String funcao;
		
	//relacionamentos
	@OneToOne(mappedBy="funcionario")
	@Cascade(CascadeType.ALL)
	private Login login;
	
	@OneToMany(mappedBy="funcionario", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Collection <Pedido_Compra> pedidos;
	
	@OneToMany(mappedBy="funcionario", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Collection <Venda> vendas;
classe login
@Entity
@Table(name = "Login") 
public class Login {

	@Id
	@Column(unique=true, nullable=false) 
	private String usuario;	
	private String senha;
	private char grupo;
	
	//Relacionamento
	@OneToOne 	
	//@JoinColumns({
	//	@JoinColumn(name="Funcionario_matricula", referencedColumnName="matricula", insertable=true, updatable=true),
    //    @JoinColumn(name="Funcionario_Pessoa_idPessoa", referencedColumnName="idPessoa",insertable=true, updatable=true)})
	@JoinColumn(name="Funcionario_Pessoa_idPessoa", referencedColumnName="idPessoa",insertable=true, updatable=true)
	private Funcionario funcionario;
e esses são os scripts do BD:
CREATE TABLE Funcionario (
  matricula INTEGER NOT NULL,
  idPessoa INTEGER NOT NULL,
  data_admissao DATE NOT NULL,
  status_funcao VARCHAR(20) NOT NULL,
  nome VARCHAR(50) NOT NULL,
  funcao VARCHAR(20) NOT NULL,
  PRIMARY KEY(idPessoa),
  FOREIGN KEY(idPessoa)
    REFERENCES Pessoa(idPessoa)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
);

CREATE TABLE Login (
  usuario VARCHAR(45) NOT NULL,
  Funcionario_Pessoa_idPessoa INTEGER NOT NULL,
  senha VARCHAR(10) NOT NULL,
  grupo VARCHAR(10) NOT NULL,
  PRIMARY KEY(usuario),
  FOREIGN KEY(Funcionario_Pessoa_idPessoa)
    REFERENCES Funcionario(idPessoa)
);

Onde estou errando aqui?

LI nesse post que o Postgres 8.3 http://www.guj.com.br/posts/list/208120.java#1057423

apresenta esse bug, eu uso o 8.4, pode ser isso?

6 Respostas

R

Faz o seguinte:pega esse sql que foi gerado e executa direto no banco.

S

Rodei a query e funcionou sem problemas

S

Estou pensando em alterar todos os intergers em string pra ver se funciona.

N

Ola amigo…

eu reparei numa coisa:

private String senha; private char grupo;

esses atributos de sua sua classe Login estão assim mesmo?

O mapeamento das colunas senha e grupo estão em outro lugar?
Se não estiverem mapeadas o erro pode ser esse…

M

Posta a classe Pessoa aí.

R

neno:
Ola amigo…

eu reparei numa coisa:

private String senha; private char grupo;

esses atributos de sua sua classe Login estão assim mesmo?

O mapeamento das colunas senha e grupo estão em outro lugar?
Se não estiverem mapeadas o erro pode ser esse…

Na verdade,se a anotação @Column não for especificada,por padrão o nome da coluna será o nome do atributo.Isso funciona sem problemas.

Criado 9 de novembro de 2010
Ultima resposta 10 de nov. de 2010
Respostas 6
Participantes 4