[SPRING] 최대 절전 모드 : 클래스에 적절한 생성자를 찾을 수 없음 - HQL
SPRING최대 절전 모드 : 클래스에 적절한 생성자를 찾을 수 없음 - HQL
이 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 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 .. 새로운 Ponto (...)가없는 Ponto의 목록을 반환합니다.
해결법
-
==============================
1.다음 사항을 확인하십시오.
다음 사항을 확인하십시오.
1- 당신이 매개 변수를 가진 생성자를 만든다면; 당신은 매개 변수없이 생성자에 explicity를 제공해야합니다.
2 - ID 엔티티가 int / Integer인지 확인하십시오.
3 구현을 통해 Entity를 java.io.Serializable로 만듭니다.
4- 매개 변수없는 (기본) 생성자를 공용 또는 기본 액세스 한정자로 만듭니다.
-
==============================
2.문제가 발견되었습니다 ... 잘못된 생성자를 만들었으므로 생성자를 편집했습니다.
문제가 발견되었습니다 ... 잘못된 생성자를 만들었으므로 생성자를 편집했습니다.
@Entity @Table (name = "ponto") public class Ponto implements java.io.Serializable { @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 = true) private Integer tipo; public Ponto() { } public Ponto(UsuarioCliente cliente, UsuarioLoja loja, long qtdPontos) { this.cliente = cliente; this.loja = loja; this.qtdPontos = qtdPontos; } // getters and setters }
및 HQL :
Query q = getSession().createQuery("select new Ponto(ss.cliente,ss.loja,sum(ss.qtdPontos) as qtdPontos) " + "from Ponto as ss where ss.loja.id = :idLoja " + "group by ss.cliente, ss.loja"); q.setParameter("idLoja", idLoja);
나는이 문제로 4 일 동안 아기처럼 울고있다.
Thufir Hawat에게 감사드립니다.
-
==============================
3.인수가있는 public 생성자를 만들면 작동시킬 수 있습니다.
인수가있는 public 생성자를 만들면 작동시킬 수 있습니다.
-
==============================
4.선택 (즉, 표의 모든 열을 반환하지 않음) 한 경우 매핑 된 클래스에 선택한 열이있는 생성자가 있어야합니다.
선택 (즉, 표의 모든 열을 반환하지 않음) 한 경우 매핑 된 클래스에 선택한 열이있는 생성자가 있어야합니다.
from https://stackoverflow.com/questions/29224093/hibernate-unable-to-locate-appropriate-constructor-on-class-hql by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Log4J - SiftingAppender와 유사한 기능 (0) | 2019.05.06 |
---|---|
[SPRING] @Constructor annotation에 의해 annoted 된 Spring 구성 클래스에 기본 생성자가 있어야하는 이유는 무엇입니까? (0) | 2019.05.06 |
[SPRING] AspectJ와 Spring Boot에서 @Autowired 사용하기 (0) | 2019.05.06 |
[SPRING] Spring Cloud AWS에서 Cloudform 사용 안 함 (0) | 2019.05.06 |
[SPRING] 스프링 보안으로 OAuth 2.0에서 resourceId의 의미 (0) | 2019.05.06 |