Problemas com Hibernate e PosgreSQL

4 respostas
A

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:
public List<Tipo> listarCheque(Date hoje, boolean modo)
    {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        List<Tipo> 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;
    }
classe bean:
/*
 * 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 + "]";
    }

}
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...

4 Respostas

jyoshiriro

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

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

A

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?

jyoshiriro

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:

A

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

Criado 12 de janeiro de 2010
Ultima resposta 13 de jan. de 2010
Respostas 4
Participantes 2