使用HibernateTemplate执行命名查询

时间:2011-11-18 18:38:37

标签: hibernate spring-mvc hibernate-mapping

我正在使用Struts,Spring和hibernate3开发一个小应用程序。但现在我发现使用HibernateTemplate执行命名查询时遇到了麻烦。

这是我的实体类Product.java

@Entity
@Table(name = "product")
@NamedQueries({
@NamedQuery(name = "Product.findAll", query = "SELECT p FROM Product p"),
@NamedQuery(name = "Product.findByProductid", query = "SELECT p FROM Product p WHERE p.productid = :productid"),
@NamedQuery(name = "Product.findByProductname", query = "SELECT p FROM Product p WHERE p.productname = :productname"),
@NamedQuery(name = "Product.findByProductdesc", query = "SELECT p FROM Product p WHERE p.productdesc = :productdesc"),
@NamedQuery(name = "Product.findByUnitprice", query = "SELECT p FROM Product p WHERE p.unitprice = :unitprice"),
@NamedQuery(name = "Product.findByStockquantity", query = "SELECT p FROM Product p WHERE p.stockquantity = :stockquantity")})
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "productid")
private Integer productid;
@Basic(optional = false)
@Column(name = "productname")
private String productname;
@Column(name = "productdesc")
private String productdesc;
@Basic(optional = false)
@Column(name = "unitprice")
private double unitprice;
@Basic(optional = false)
@Column(name = "stockquantity")
private int stockquantity;

public Product() {
}

public Product(Integer productid) {
    this.productid = productid;
}

public Product(Integer productid, String productname, double unitprice, int stockquantity) {
    this.productid = productid;
    this.productname = productname;
    this.unitprice = unitprice;
    this.stockquantity = stockquantity;
}

public Integer getProductid() {
    return productid;
}

public void setProductid(Integer productid) {
    this.productid = productid;
}

public String getProductname() {
    return productname;
}

public void setProductname(String productname) {
    this.productname = productname;
}

public String getProductdesc() {
    return productdesc;
}

public void setProductdesc(String productdesc) {
    this.productdesc = productdesc;
}

public double getUnitprice() {
    return unitprice;
}

public void setUnitprice(double unitprice) {
    this.unitprice = unitprice;
}

public int getStockquantity() {
    return stockquantity;
}

public void setStockquantity(int stockquantity) {
    this.stockquantity = stockquantity;
}

@Override
public int hashCode() {
    int hash = 0;
    hash += (productid != null ? productid.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Product)) {
        return false;
    }
    Product other = (Product) object;
    if ((this.productid == null && other.productid != null) || (this.productid != null && !this.productid.equals(other.productid))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "com.pojo.Product[productid=" + productid + "]";
}

}

这是DAO,ProductDAO.java

public class ProductDAO extends HibernateDaoSupport{

public List listProducts() {
    return getHibernateTemplate().findByNamedQuery("Product.findAll");
}
}

但是当我运行应用程序时,我遇到以下异常。

org.springframework.orm.hibernate3.HibernateSystemException: Named query not known: Product.findAll

已经有一个方法findNamedQuery() - 在HibernateTemplate类中运行命名查询。并且查询作为注释输入。

我是否也需要将它放在映射文件中?

有什么想法吗?

1 个答案:

答案 0 :(得分:0)