gpt4 book ai didi

java - hibernate :无法在类上找到适当的构造函数 - HQL

转载 作者:IT老高 更新时间:2023-10-28 13:49:01 24 4
gpt4 key购买 nike

当我尝试执行此 HQL 以返回对象 Ponto 时,我收到此错误:

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]

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

控制:

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

...

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

map.put("pontos", pontos);

return "listaClientesPonto";
}
}

查看:

<%@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>

为什么会出现此错误?
为什么要在列表中接收此对象 Ponto 有更好的方法吗?

obs.. without new Ponto(...) 返回带有未识别对象[] 的 Ponto 列表

最佳答案

检查这些事情:

1- 如果你创建一个带参数的构造函数;您应该明确地为构造函数提供不带参数的;

2- 确保您的 ID 实体是 int/Integer;

3- 通过实现使您的实体 java.io.Serializable;

4- 使您的无参数(默认)构造函数公开或默认访问修饰符;

关于java - hibernate :无法在类上找到适当的构造函数 - HQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29224093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com