如何获得一列的 DISTINCT 结果集。在这种情况下productType
。
我已经为此浪费了几个小时,而且非常疲倦。我不知道为什么这这么难:(
我得到的错误是:
exception
javax.servlet.ServletException: javax.el.PropertyNotFoundException: The class 'java.lang.String' does not have the property 'productType'.
root cause
javax.el.PropertyNotFoundException: The class 'java.lang.String' does not have the property 'productType'.
我在 ProductFacade 中的查询
public List<Product> getDistinctProduct()
{
return em.createQuery( "SELECT DISTINCT p.productType FROM Product p" )
.getResultList();
}
我的产品实体
@Entity
@Table(name = "product")
@XmlRootElement
@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.findByName", query = "SELECT p FROM Product p WHERE p.name = :name"),
@NamedQuery(name = "Product.findByPrice", query = "SELECT p FROM Product p WHERE p.price = :price"),
@NamedQuery(name = "Product.findByDescription", query = "SELECT p FROM Product p WHERE p.description = :description"),
@NamedQuery(name = "Product.findByQuantityInStock", query = "SELECT p FROM Product p WHERE p.quantityInStock = :quantityInStock"),
@NamedQuery(name = "Product.findByImageUrl", query = "SELECT p FROM Product p WHERE p.imageUrl = :imageUrl"),
@NamedQuery(name = "Product.findByProductType", query = "SELECT p FROM Product p WHERE p.productType = :productType")})
public class Product implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "product_id")
private Integer productId;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "name")
private String name;
@Basic(optional = false)
@NotNull
@Column(name = "price")
private float price;
@Size(max = 1024)
@Column(name = "description")
private String description;
@Basic(optional = false)
@NotNull
@Column(name = "quantity_in_stock")
private int quantityInStock;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 256)
@Column(name = "image_url")
private String imageUrl;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 16)
@Column(name = "product_type")
private String productType;
@ManyToMany(mappedBy = "productCollection")
private Collection<Wishlist> wishlistCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "product")
private Collection<OrderProduct> orderProductCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "product")
private Collection<Review> reviewCollection;
public Product() {
}
public Product(Integer productId) {
this.productId = productId;
}
public Product(Integer productId, String name, float price, String description, int quantityInStock, String imageUrl, String productType) {
this.productId = productId;
this.name = name;
this.price = price;
this.description = description;
this.quantityInStock = quantityInStock;
this.imageUrl = imageUrl;
this.productType = productType;
}
public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getQuantityInStock() {
return quantityInStock;
}
public void setQuantityInStock(int quantityInStock) {
this.quantityInStock = quantityInStock;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public String getProductType() {
return productType;
}
public void setProductType(String productType) {
this.productType = productType;
}
@XmlTransient
@JsonIgnore
public Collection<Wishlist> getWishlistCollection() {
return wishlistCollection;
}
public void setWishlistCollection(Collection<Wishlist> wishlistCollection) {
this.wishlistCollection = wishlistCollection;
}
@XmlTransient
@JsonIgnore
public Collection<OrderProduct> getOrderProductCollection() {
return orderProductCollection;
}
public void setOrderProductCollection(Collection<OrderProduct> orderProductCollection) {
this.orderProductCollection = orderProductCollection;
}
@XmlTransient
@JsonIgnore
public Collection<Review> getReviewCollection() {
return reviewCollection;
}
public void setReviewCollection(Collection<Review> reviewCollection) {
this.reviewCollection = reviewCollection;
}
@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.onemore.entity.Product[ productId=" + productId + " ]";
}
}