mardi 24 mars 2015

hibernate: Unable to locate appropriate constructor on class - HQL

When I trying to execute this HQL to return an object Ponto I receive this error:



ERROR [org.hibernate.hql.PARSER] (http-localhost-127.0.0.1-8080-2) Unable to locate appropriate constructor on class [br.com.cdv.model.entity.Ponto] [cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: br.com.cdv.model.entity.Ponto]



DAO



@SuppressWarnings("unchecked")
@Override
public List<Ponto> listLoja(Integer idLoja) {

Query q = getSession().createQuery("select new Ponto(0,ss.cliente,ss.loja,null,null,null,null,null,sum(qtdPontos),'',0) "
+ "from Ponto as ss where ss.loja.id = :idLoja "
+ "group by ss.cliente, ss.loja");

q.setParameter("idLoja", idLoja);

return (List<Ponto>) q.list();
}


My Entity / Class



@Entity
@Table (name = "ponto")
public class Ponto {

@Id
@GeneratedValue
private Integer id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="cliente", nullable=true)
private UsuarioCliente cliente;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="loja", nullable=false)
private UsuarioLoja loja;

@Column(name="dataCriacao")
private Date dataCriacao;

@Column(name="dataUtilizado", length=12, nullable=true)
private Date dataUtilizado;

@Column(name="dataExpira")
private Date dataExpira;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "funcionario", nullable=true)
private Funcionario funcionario;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "pontoReceber", nullable=true)
private PontoReceber pontoReceber;

@Column(name="qtdPontos", nullable=false)
private long qtdPontos;

@Column(name="obsPontos", nullable = true,length=300)
private String obsPontos;

@NotEmpty
@Column(name="tipo",nullable = false)
private Integer tipo;

public Ponto(){}

public Ponto(Integer id, UsuarioCliente cliente,UsuarioLoja loja, Date dataCriacao, Date dataUtilizado,
Date dataExpira, Funcionario funcionario, PontoReceber pontoReceber, long qtdPontos, String obsPontos, Integer tipo) {
this.id = id;
this.cliente = cliente;
this.loja = loja;
this.dataCriacao = dataCriacao;
this.dataUtilizado = dataUtilizado;
this.dataExpira = dataUtilizado;
this.funcionario = funcionario;
this.pontoReceber = pontoReceber;
this.qtdPontos = qtdPontos;
this.obsPontos = obsPontos;
this.tipo = tipo;
}
// getters and setters
}


Control:



@RequestMapping("/listarClientes")
public String listarClientesPontos(Map<String, Object> map, HttpSession session) {

...

List<Ponto> pontos = pontoService.listLoja(loja.getId());

map.put("pontos", pontos);

return "listaClientesPonto";
}
}


View:



<%@taglib uri="http://ift.tt/QfKAz6" prefix="c"%>
<%@taglib uri="http://ift.tt/IED0jK" prefix="form"%>
<%@taglib uri="http://ift.tt/18bwTB1" prefix="spring"%>


<body>
<h2>Lista Clientes</h2>

<table>
<tr>
<th>ID Cliente</th>
<th>CPF Cliente</th>
<th>Pontos totais:</th>
</tr>

<c:forEach items="${pontos}" var="ponto" varStatus="count">
<tr>
<td>${ponto.cliente.id}</td>
<td>${ponto.cliente.cpf}</td>
<td>${ponto.qtdPontos}</td>
</tr>
</c:forEach>
</table>
</body>


Why I am getting this error?

Has any better why to receive this Object Ponto in a List?


obs.. without new Ponto(...) returns a list of Ponto with unidentified Objects[]


Aucun commentaire:

Enregistrer un commentaire