hibernate:无法在类上定位适当的构造函数 - HQL [英] hibernate: Unable to locate appropriate constructor on class - HQL

查看:137
本文介绍了hibernate:无法在类上定位适当的构造函数 - HQL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我试图执行这个HQL来返回一个对象 Ponto 时,我收到这个错误:


ERROR [org.hibernate.hql.PARSER](http-localhost-127.0.0.1-8080-2)
无法在类
上找到适当的构造函数[br.com.cdv。 model.entity.Ponto]
[cause = org.hibernate.PropertyNotFoundException:在类中没有合适的
构造函数: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();
}

我的实体/班

  @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%> 
<%@ taglib uri =http://www.springframework.org/tags/formprefix =form%>
<%@ taglib uri =http://www.springframework.org/tagsprefix =spring%>


< 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:

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 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆