2

我正在使用以下查询 String queryString = "select NEW com.h.offering.dto.SellerDetailsDto(p.productId,p.sellerId, p.sellerSku, p.sellPrice, " + "p.transferPrice, p.sellerMRP,p. aCommission,p.baseShippingFee,p.addnShippingFee, " + "p.propogationLevel,p.propogationValue,a.warehouseName,a.quantity,a.maxShippingTime,a.minShippingTime) " + "来自 PriceDetails p,AvailabilityDetails a " + "其中a.productId = p.productId " + "和 a.sellerSku = p.sellerSku " + "和 a.sellerId = :sellerId";

执行时我收到错误

org.hibernate.hql.ast.QuerySyntaxException:无法在类 [com.a.offering.dto.SellerDetailsDto] 上找到适当的构造函数 [从 com.a 中选择新的 com.s.offering.dto.SellerDetailsDto(p.productId)。 offer.db.domain.PriceDetails p, com.a.offering.db.domain.AvailabilityDetails a 其中 a.productId = p.productId and a.sellerSku = p.sellerSku and a.sellerId = :sellerId] at org.hibernate。 hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54) 在 org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47) 在 org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java: 82) 在 org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185) 在 org.hibernate.hql.ast 的 org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:261)。QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)

等等...

我无法弄清楚错误。帮帮我

The code for SellerDetailsDto.java is 

package com.a.offering.dto;
public class SellerDetailsDto {
    public String productId;
    public String sellerId;
    public String sellerSku;
    public Double sellPrice;
    public Double transferPrice;
    public Double sellerMRP;
    public Double a;
    public Double baseShippingFee;
    public Double addnShippingFee;
    public String propogationLevel;
    public String propogationValue;
    public String warehouseName;
    public int quantity;
    public int maxShippingTime;
    public int minShippingTime;

    public String getProductId() {
        return productId;
    }

    public void setProductId(String productId) {
        this.productId = productId;
    }

    public String getSellerId() {
        return sellerId;
    }

    public void setSellerId(String sellerId) {
        this.sellerId = sellerId;
    }

    public String getSellerSku() {
        return sellerSku;
    }

    public void setSellerSku(String sellerSku) {
        this.sellerSku = sellerSku;
    }

    public String getWarehouseName() {
        return warehouseName;
    }

    public void setWarehouseName(String warehouseName) {
        this.warehouseName = warehouseName;
    }

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public int getMaxShippingTime() {
        return maxShippingTime;
    }

    public void setMaxShippingTime(int maxShippingTime) {
        this.maxShippingTime = maxShippingTime;
    }

    public int getMinShippingTime() {
        return minShippingTime;
    }

    public void setMinShippingTime(int minShippingTime) {
        this.minShippingTime = minShippingTime;
    }

    public Double getSellPrice() {
        return sellPrice;
    }

    public void setSellPrice(Double sellPrice) {
        this.sellPrice = sellPrice;
    }

    public Double getTransferPrice() {
        return transferPrice;
    }

    public void setTransferPrice(Double transferPrice) {
        this.transferPrice = transferPrice;
    }

    public Double getSellerMRP() {
        return sellerMRP;
    }

    public void setSellerMRP(Double sellerMRP) {
        this.sellerMRP = sellerMRP;
    }

    public Double a() {
        return a;
    }

    public void a(Double aa) {

一种 }

    public Double getBaseShippingFee() {
        return baseShippingFee;
    }

    public void setBaseShippingFee(Double baseShippingFee) {
        this.baseShippingFee = baseShippingFee;
    }

    public Double getAddnShippingFee() {
        return addnShippingFee;
    }

    public void setAddnShippingFee(Double addnShippingFee) {
        this.addnShippingFee = addnShippingFee;
    }

    public String getPropogationLevel() {
        return propogationLevel;
    }

    public void setPropogationLevel(String propogationLevel) {
        this.propogationLevel = propogationLevel;
    }

    public String getPropogationValue() {
        return propogationValue;
    }

    public void setPropogationValue(String propogationValue) {
        this.propogationValue = propogationValue;
    }

}
4

3 回答 3

4

Hibernate 需要一个至少具有包私有(即默认)可见性的构造函数。

通常无参数构造函数是必要的(您隐含地拥有),但对于您的select new ...SellerDetailsDto 需要一个具有您在 select 语句中提供的 15 个参数的构造函数。(认为​​错误消息需要一个仅将 id 作为参数的构造函数 - 看起来错误是否来自不同的select new语句。)您没有这样的构造函数。

于 2012-06-06T06:56:54.927 回答
1

问题是您在 SellerDetailsDto 中没有接受您在 hql 查询中传递的参数的构造函数。将此构造函数添加到您的类中:

public SellerDetailsDto(String productId, String sellerId,
            String sellerSku, Double sellPrice, Double transferPrice,
            Double sellerMRP, Double tradusCommission, Double baseShippingFee,
            Double addnShippingFee, String propogationLevel,
            String propogationValue, String warehouseName, int quantity,
            int maxShippingTime, int minShippingTime) {
        this.productId = productId;
        this.sellerId = sellerId;
        this.sellerSku = sellerSku;
        this.sellPrice = sellPrice;
        this.transferPrice = transferPrice;
        this.sellerMRP = sellerMRP;
        this.tradusCommission = tradusCommission;
        this.baseShippingFee = baseShippingFee;
        this.addnShippingFee = addnShippingFee;
        this.propogationLevel = propogationLevel;
        this.propogationValue = propogationValue;
        this.warehouseName = warehouseName;
        this.quantity = quantity;
        this.maxShippingTime = maxShippingTime;
        this.minShippingTime = minShippingTime;
    }

这可能会使您不得不停止工作的其他一些代码,因为现在不会有可用的默认构造函数。为了解决这个问题,也添加一个默认构造函数:

public SellerDetailsDto() {}
于 2012-06-06T07:02:25.587 回答
0

实际上这是您的根 pom 文件的问题。你想在你的 IDE 中安装 lombok 并在根 pom 文件中添加 lombok 的依赖项我希望它会工作

于 2021-08-25T09:36:16.427 回答