복붙노트

[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.다음 사항을 확인하십시오.

    다음 사항을 확인하십시오.

    1- 당신이 매개 변수를 가진 생성자를 만든다면; 당신은 매개 변수없이 생성자에 explicity를 제공해야합니다.

    2 - ID 엔티티가 int / Integer인지 확인하십시오.

    3 구현을 통해 Entity를 java.io.Serializable로 만듭니다.

    4- 매개 변수없는 (기본) 생성자를 공용 또는 기본 액세스 한정자로 만듭니다.

  2. ==============================

    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. ==============================

    3.인수가있는 public 생성자를 만들면 작동시킬 수 있습니다.

    인수가있는 public 생성자를 만들면 작동시킬 수 있습니다.

  4. ==============================

    4.선택 (즉, 표의 모든 열을 반환하지 않음) 한 경우 매핑 된 클래스에 선택한 열이있는 생성자가 있어야합니다.

    선택 (즉, 표의 모든 열을 반환하지 않음) 한 경우 매핑 된 클래스에 선택한 열이있는 생성자가 있어야합니다.

  5. from https://stackoverflow.com/questions/29224093/hibernate-unable-to-locate-appropriate-constructor-on-class-hql by cc-by-sa and MIT license