我正在使用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类中运行命名查询。并且查询作为注释输入。
我是否也需要将它放在映射文件中?
有什么想法吗?
答案 0 :(得分:0)
您是否记得将产品实体添加到 annotatedClasses ?