Tipo de retorno Incorreto

3 respostas
R

Ola, sou iniciante nesse negocio de hibernate, e estou tendo um problema, o negocio e o seguinte:

tenho o seguinte contrutor da classe:

private String data;
private BigInteger floatSoma;
private BigInteger floatContador;
private BigInteger floatMedia;

public TempoMaquinaRO(String dateData, BigInteger floatSoma, BigInteger floatContador, BigInteger floatMedia) {
this.data = dateData;
this.floatSoma = floatSoma;
this.floatContador = floatContador;
this.floatMedia = floatMedia;
}

na classe DAO, faço a seguinte consulta:

public Collection<TempoMaquinaRO> selectDadosTempoRetificacao(String stringMesAno, String stringTipoCilindro)
    {
        //Montagem da consulta HQL
        StringBuilder strHQLQuery = new StringBuilder();

        strHQLQuery.append("Select new TempoMaquinaRO(to_char(a.data, 'dd'), Sum(b.tempototal), count(b.tempototal), Avg(b.tempototal))");
        strHQLQuery.append(" From DiaTurno a, CilindroRetificado b");
        strHQLQuery.append(" Where a.data in (Select data From DiaTurno Where to_char(data, 'MM/yyyy') = '");
        strHQLQuery.append(stringMesAno);  // formato mes/ano )
        strHQLQuery.append("') And a.iddiaturno = b.iddiaturno And b.tipocilindro = '");
        strHQLQuery.append(stringTipoCilindro);
        strHQLQuery.append("' Group by a.data Order by a.data");

        //Criação da variáveis de coleção de objetos
        Collection<TempoMaquinaRO> tempomaquinaCollection = super.select(strHQLQuery.toString());

        //Se a coleção de objetos for nula ou estiver vazia
        if (tempomaquinaCollection == null || tempomaquinaCollection.size() == 0)
        {
            //Retorna nulo
            return null;
        }
        //Retorna a coleção de objetos
        return tempomaquinaCollection;
    }

exite as classes DiaTurno e CilindroRetificado que se referencem a tabelas do banco

o erro que ocorre e: Unable to locate appropriate constructor on class [TempoMaquinaRO]
[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: [TempoMaquinaRO]

Desconfio que nao acha o contrustor devido ao To_char(data), mas acho que o tipo seria um string mesmo
o Hibernate tem problemas com isso? posso fazer a consulta desse modo? para que retorne apenas o ‘dia’ da data

3 Respostas

M

renrs, para o Hibernate instanciar seus objetos, a classe precisa ter o construtor default (aquele sem argumentos).

Quando você define um construtor diferente (como você fez), o construtor default precisa existir explicitamente.

Tente colocar isso na sua classe TempoMaquinaRO

public TempoMaquinaRO() { }

R

Ola,
o contrutor padrao ja existia

public TempoMaquinaRO() {
    }

assim como um outro:

public TempoMaquinaRO(Date horaInicio, Date horaFim, BigInteger duracao) {
        this.horainicio = horaInicio;
        this.horafim = horaFim;
        this.duracao = duracao;
    }

mas o que to precisando é que acesse o contrutor:

public TempoMaquinaRO(String dateData, Integer floatSoma, Integer floatContador, Integer floatMedia) {
        this.data = dateData;
        this.floatSoma = floatSoma;
        this.floatContador = floatContador;
        this.floatMedia = floatMedia;
    }

os gets e sets estao corretos.

alguma sugestao sobre o pq nao estar achando o contrutor que preciso?

M

Com o construtor padrão também dá erro?! E o erro é o mesmo?

Até onde eu sei, hibernate não chama outro construtor além do padrão. Ele constrói o objeto com o construtor padrão e chama os setters por si mesmo (mesmo os setters você não tem garantia, por que ele pode usar reflexão)

Criado 28 de maio de 2010
Ultima resposta 28 de mai. de 2010
Respostas 3
Participantes 2