2011-11-18 69 views
1

我正在開發一個使用Struts,Spring和hibernate3的小型應用程序。但是現在我發現使用HibernateTemplate執行命名查詢時遇到了麻煩。使用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類運行命名查詢。查詢作爲註釋輸入。

我是否需要將它放入映射文件中?

有什麼想法嗎?

回答