Problemas com Hibernate e PosgreSQL

Boa tarde galera, estou com um problema com o hibernate e o postgres, tenho uma tabela com uma coluna definida como date, quando vou executar uma consulta ao banco ele me apresenta o seguinte erro. O estranho é que o código funciona perfeitamente no mysql.

org.hibernate.exception.SQLGrammarException: could not execute query
org.postgresql.util.PSQLException: ERRO: operador não existe: date ~~ unknonw
Dica: Nenhum operador corresponde como nome o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.
Posição: 2511

código da consulta:

[code] public List listarCheque(Date hoje, boolean modo)
{
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List bean ;
try
{
Criteria criteria = session.createCriteria(classe);
criteria.add(Restrictions.like(“chequeDataEntrada”,hoje));

        if(modo == true)
            criteria.addOrder(Order.asc("chequeLancamento"));
        else
            criteria.addOrder(Order.asc("chequeCodigo"));

        bean = criteria.list();
    }
    catch(Exception e)
    {
        JOptionPane.showMessageDialog(null,"Erro ao listar pelo Cheque:"+classe.getName()+"\n"+e+"\n"+e.getCause());
        return null;
    }
    session.getTransaction().commit();
    return bean;
}[/code]

classe bean:

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package Bean;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
*

  • @author André
    */
    @Entity
    @Table(name = “cheque”)
    @NamedQueries({
    @NamedQuery(name = “Cheque.findAll”, query = “SELECT c FROM Cheque c”),
    @NamedQuery(name = “Cheque.findByChequeCodigo”, query = “SELECT c FROM Cheque c WHERE c.chequeCodigo = :chequeCodigo”),
    @NamedQuery(name = “Cheque.findByChequeNumero”, query = “SELECT c FROM Cheque c WHERE c.chequeNumero = :chequeNumero”),
    @NamedQuery(name = “Cheque.findByChequeValor”, query = “SELECT c FROM Cheque c WHERE c.chequeValor = :chequeValor”),
    @NamedQuery(name = “Cheque.findByChequeDataEntrada”, query = “SELECT c FROM Cheque c WHERE c.chequeDataEntrada = :chequeDataEntrada”),
    @NamedQuery(name = “Cheque.findByChequeDataCompensacao”, query = “SELECT c FROM Cheque c WHERE c.chequeDataCompensacao = :chequeDataCompensacao”),
    @NamedQuery(name = “Cheque.findByChequeQuantidadeDias”, query = “SELECT c FROM Cheque c WHERE c.chequeQuantidadeDias = :chequeQuantidadeDias”),
    @NamedQuery(name = “Cheque.findByChequeTotalLiquido”, query = “SELECT c FROM Cheque c WHERE c.chequeTotalLiquido = :chequeTotalLiquido”),
    @NamedQuery(name = “Cheque.findByChequeLimite”, query = “SELECT c FROM Cheque c WHERE c.chequeLimite = :chequeLimite”),
    @NamedQuery(name = “Cheque.findByChequeCompensado”, query = “SELECT c FROM Cheque c WHERE c.chequeCompensado = :chequeCompensado”),
    @NamedQuery(name = “Cheque.findByChequeLancamento”, query = “SELECT c FROM Cheque c WHERE c.chequeLancamento = :chequeLancamento”)})
    public class Cheque implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = “cheque_codigo”)
    private Integer chequeCodigo;
    @Column(name = “cheque_numero”)
    private String chequeNumero;
    @Column(name = “cheque_valor”)
    private BigDecimal chequeValor;
    @Column(name = “cheque_data_entrada”)
    @Temporal(TemporalType.DATE)
    private Date chequeDataEntrada;
    @Column(name = “cheque_data_compensacao”)
    @Temporal(TemporalType.DATE)
    private Date chequeDataCompensacao;
    @Column(name = “cheque_quantidade_dias”)
    private Integer chequeQuantidadeDias;
    @Column(name = “cheque_total_liquido”)
    private BigDecimal chequeTotalLiquido;
    @Column(name = “cheque_limite”)
    private BigDecimal chequeLimite;
    @Column(name = “cheque_compensado”)
    private String chequeCompensado;
    @Column(name = “cheque_lancamento”)
    private Integer chequeLancamento;
    @JoinColumn(name = “agencia_codigo”, referencedColumnName = “agencia_codigo”)
    @ManyToOne
    private Agencia agenciaCodigo;
    @JoinColumn(name = “cli_codigo”, referencedColumnName = “cli_codigo”)
    @ManyToOne
    private Cliente cliCodigo;
    @JoinColumn(name = “emit_codigo”, referencedColumnName = “emit_codigo”)
    @ManyToOne(optional = false)
    private Emitente emitCodigo;

    public Cheque() {
    }

    public Cheque(Integer chequeCodigo) {
    this.chequeCodigo = chequeCodigo;
    }

    public Integer getChequeCodigo() {
    return chequeCodigo;
    }

    public void setChequeCodigo(Integer chequeCodigo) {
    this.chequeCodigo = chequeCodigo;
    }

    public String getChequeNumero() {
    return chequeNumero;
    }

    public void setChequeNumero(String chequeNumero) {
    this.chequeNumero = chequeNumero;
    }

    public BigDecimal getChequeValor() {
    return chequeValor;
    }

    public void setChequeValor(BigDecimal chequeValor) {
    this.chequeValor = chequeValor;
    }

    public Date getChequeDataEntrada() {
    return chequeDataEntrada;
    }

    public void setChequeDataEntrada(Date chequeDataEntrada) {
    this.chequeDataEntrada = chequeDataEntrada;
    }

    public Date getChequeDataCompensacao() {
    return chequeDataCompensacao;
    }

    public void setChequeDataCompensacao(Date chequeDataCompensacao) {
    this.chequeDataCompensacao = chequeDataCompensacao;
    }

    public Integer getChequeQuantidadeDias() {
    return chequeQuantidadeDias;
    }

    public void setChequeQuantidadeDias(Integer chequeQuantidadeDias) {
    this.chequeQuantidadeDias = chequeQuantidadeDias;
    }

    public BigDecimal getChequeTotalLiquido() {
    return chequeTotalLiquido;
    }

    public void setChequeTotalLiquido(BigDecimal chequeTotalLiquido) {
    this.chequeTotalLiquido = chequeTotalLiquido;
    }

    public BigDecimal getChequeLimite() {
    return chequeLimite;
    }

    public void setChequeLimite(BigDecimal chequeLimite) {
    this.chequeLimite = chequeLimite;
    }

    public String getChequeCompensado() {
    return chequeCompensado;
    }

    public void setChequeCompensado(String chequeCompensado) {
    this.chequeCompensado = chequeCompensado;
    }

    public Integer getChequeLancamento() {
    return chequeLancamento;
    }

    public void setChequeLancamento(Integer chequeLancamento) {
    this.chequeLancamento = chequeLancamento;
    }

    public Agencia getChequeAgencia() {
    return agenciaCodigo;
    }

    public void setChequeAgencia(Agencia agenciaCodigo) {
    this.agenciaCodigo = agenciaCodigo;
    }

    public Cliente getChequeCliente() {
    return cliCodigo;
    }

    public void setChequeCliente(Cliente cliCodigo) {
    this.cliCodigo = cliCodigo;
    }

    public Emitente getEmitCodigo() {
    return emitCodigo;
    }

    public void setEmitCodigo(Emitente emitCodigo) {
    this.emitCodigo = emitCodigo;
    }

    @Override
    public int hashCode() {
    int hash = 0;
    hash += (chequeCodigo != null ? chequeCodigo.hashCode() : 0);
    return hash;
    }

    @Override
    public boolean equals(Object object) {
    // TODO: Warning - this method won’t work in the case the id fields are not set
    if (!(object instanceof Cheque)) {
    return false;
    }
    Cheque other = (Cheque) object;
    if ((this.chequeCodigo == null && other.chequeCodigo != null) || (this.chequeCodigo != null && !this.chequeCodigo.equals(other.chequeCodigo))) {
    return false;
    }
    return true;
    }

    @Override
    public String toString() {
    return “Bean.Cheque[chequeCodigo=” + chequeCodigo + “]”;
    }

}[/code]

sql de criação do banco:

create table CHEQUE ( CHEQUE_CODIGO serial not null, CLI_CODIGO int, AGENCIA_CODIGO int, EMIT_CODIGO int not null, CHEQUE_NUMERO varchar(15), CHEQUE_VALOR decimal(10,2), CHEQUE_DATA_ENTRADA date, CHEQUE_DATA_COMPENSACAO date, CHEQUE_QUANTIDADE_DIAS int, CHEQUE_TOTAL_LIQUIDO decimal(10,2), CHEQUE_LIMITE decimal(10,2), CHEQUE_COMPENSADO char(1), CHEQUE_LANCAMENTO int, primary key (CHEQUE_CODIGO) );

espero que possam me ajudar, já revirei a net e não consegui achar nada sobre o assunto…

e desde já obrigado…

Por que esa usando “like” com campo do tipo data? :shock:

@Column(name = "cheque_data_entrada") @Temporal(TemporalType.DATE) private Date chequeDataEntrada;

no caso eu tenho que pegar um registro que tenha a data de hoje, quando eu chamo essa função, eu passo por parametro new Date().

Para comparações entre datas eu devo utilizar outra função?

Amigo, o Restrictions.like deve ser usado quando se deseja o efeito de “like” do SQL.

No caso de pesquisa exata, como a que você relatou, use Restrictions.eq

Para pequisa entre duas datas, use

ou, simplesmente:

blz, vou fazer o teste e posto aqui o resultado.
valeu pela ajuda…