问题描述
当我试图执行这个HQL来返回一个对象 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();
}
我的实体/班
@Entity
@Table(name =ponto)
public class Ponto实现Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
私人整数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)
私人日期dataCriacao;
@Column(name =dataUtilizado,length = 12,nullable = true)
private dataUtilizado;
@Column(name =dataExpira)
私人日期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(Integer id,UsuarioCliente cliente,UsuarioLoja loja,Date dataCriacao,Date dataUtilizado,
Date dataExpira,Funcionario funcionario,PontoReceber pontoReceber,long qtdPontos,String obsPontos,Integer tipo){
setId(id);
setCliente(cliente);
setLoja(loja);
setDataCriacao(dataCriacao);
setDataUtilizado(dataUtilizado);
setDataExpira(dataExpira);
setFuncionario(funcionario);
setPontoReceber(pontoReceber);
setQtdPontos(qtdPontos);
setObsPontos(obsPontos);
setTipo(tipo);
// getters and setters
code
控件:
@RequestMapping(/ listarClientes)
public String listarClientesPontos(Map< String,Object> map,HttpSession session ){
...
List< Ponto> pontos = pontoService.listLoja(loja.getId());
map.put(pontos,pontos);
返回listaClientesPonto;
$ / code $ / pre
查看:
<%@ taglib uri =http://java.sun.com/jsp/jstl/coreprefix =c%>
< body>
< h2> Lista Clientes< / h2>
< table>
< tr>
< th> ID Cliente< / th>
CPF Cliente< / th>
Pontos totais:< / th>
< / tr>
< c:forEach items =$ {pontos}var =pontovarStatus =count>
< tr>
< td> $ {ponto.cliente.id}< / td>
< td> $ {ponto.cliente.cpf}< / td>
< td> $ {ponto.qtdPontos}< / td>
< / tr>
< / c:forEach>
< / table>
< / body>
为什么我得到这个错误?对象在列表中跳跃?
obs .. without new Ponto(...)
返回带有未识别对象的Ponto列表[]
解决方案 检查以下内容:
2-确保你的ID实体是int / Integer;
3-通过实现使您的实体java.io.Serializable成为可能
$ b
4-使您的无参数默认构造函数为public或默认访问修饰符
p>
When I trying to execute this HQL to return an object Ponto
I receive this error:
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 implements Serializable {
private static final long serialVersionUID = 1L;
@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(Integer id, UsuarioCliente cliente,UsuarioLoja loja, Date dataCriacao, Date dataUtilizado,
Date dataExpira, Funcionario funcionario, PontoReceber pontoReceber, long qtdPontos, String obsPontos, Integer tipo) {
setId(id);
setCliente(cliente);
setLoja(loja);
setDataCriacao(dataCriacao);
setDataUtilizado(dataUtilizado);
setDataExpira(dataExpira);
setFuncionario(funcionario);
setPontoReceber(pontoReceber);
setQtdPontos(qtdPontos);
setObsPontos(obsPontos);
setTipo(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://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://www.springframework.org/tags" 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[]
解决方案 Check these things:
1- If you make a constructor with parameters; you should provide the constructor with no parameters, explicity;
2- Make sure your ID entity is int/Integer;
3- Make your Entity java.io.Serializable by implementing;
4- Make your parameter-less (default) constructor public or default access modifier;
这篇关于hibernate:无法在类上定位适当的构造函数 - HQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!