Issue
I am using following query 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) " + "from PriceDetails p, AvailabilityDetails a " + "where a.productId = p.productId " + "and a.sellerSku = p.sellerSku " + "and a.sellerId = :sellerId";
while executing i am getting error
org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [com.a.offering.dto.SellerDetailsDto] [select NEW com.s.offering.dto.SellerDetailsDto(p.productId) from com.a.offering.db.domain.PriceDetails p, com.a.offering.db.domain.AvailabilityDetails a where a.productId = p.productId and a.sellerSku = p.sellerSku and a.sellerId = :sellerId] at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54) at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47) at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82) at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:261) at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185) at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
and so on...
I am unable to figure out the error. Help me out
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) {
a }
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;
}
}
Solution
Hibernate needs a constructor with at least package private (i. e. default) visibility.
Normally a parameterless constructor is necessary (which you implicitly have), but for your select new ...
SellerDetailsDto needs a constructor with the 15 parameters which you give in the select statement. (Thought the error message demands a constructor with only the id as a parameter - it looks like if the error is coming from a different select new
statement.) You don't have such a constructor.
Answered By - Johanna