Alterar função findAll para pegar somente alguns campos e não todos

4 respostas
J

pessoal, possuo um serviço ewb REST onde na função findAll eu gostaria de trazer alguns atributos do bean e não todos como está fazendo. Como eu poderia definir isso?

Vou postar aqui meu bean:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entities;

import com.sun.xml.bind.CycleRecoverable;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author gregori
 */
@Entity
@Table(name = "PRODUCTS")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Products.findAll", query = "SELECT p FROM Products p"),
    @NamedQuery(name = "Products.findByProductId", query = "SELECT p FROM Products p WHERE p.productId = :productId"),
    @NamedQuery(name = "Products.findByProductNumber", query = "SELECT p FROM Products p WHERE p.productNumber = :productNumber"),
    @NamedQuery(name = "Products.findByDescription", query = "SELECT p FROM Products p WHERE p.description = :description"),
    @NamedQuery(name = "Products.findByRecordType", query = "SELECT p FROM Products p WHERE p.recordType = :recordType"),
    @NamedQuery(name = "Products.findByBusiness", query = "SELECT p FROM Products p WHERE p.business = :business"),
    @NamedQuery(name = "Products.findByTimeStamp", query = "SELECT p FROM Products p WHERE p.timeStamp = :timeStamp")})
public class Products implements Serializable,CycleRecoverable {
    private static final long serialVersionUID = 1L;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "PRODUCT_ID")
    private BigDecimal productId;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "PRODUCT_NUMBER")
    private String productNumber;
    @Size(max = 1000)
    @Column(name = "DESCRIPTION")
    private String description;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "RECORD_TYPE")
    private String recordType;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "BUSINESS")
    private String business;
    @Column(name = "TIME_STAMP")
    @Temporal(TemporalType.TIMESTAMP)
    private Date timeStamp;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "productId")
    private Collection<RelatedItems> relatedItemsCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "relatedProductId")
    private Collection<RelatedItems> relatedItemsCollection1;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "groupId")
    private Collection<ProductGroups> productGroupsCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "productId")
    private Collection<ProductGroups> productGroupsCollection1;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "productId")
    private Collection<Copy> copyCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "productId")
    private Collection<Items> itemsCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "productId")
    private Collection<ProductAttributes> productAttributesCollection;

    public Products() {
    }

    public Products(BigDecimal productId) {
        this.productId = productId;
    }

    public Products(BigDecimal productId, String productNumber, String recordType, String business) {
        this.productId = productId;
        this.productNumber = productNumber;
        this.recordType = recordType;
        this.business = business;
    }

    public BigDecimal getProductId() {
        return productId;
    }

    public void setProductId(BigDecimal productId) {
        this.productId = productId;
    }

    public String getProductNumber() {
        return productNumber;
    }

    public void setProductNumber(String productNumber) {
        this.productNumber = productNumber;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getRecordType() {
        return recordType;
    }

    public void setRecordType(String recordType) {
        this.recordType = recordType;
    }

    public String getBusiness() {
        return business;
    }

    public void setBusiness(String business) {
        this.business = business;
    }

    public Date getTimeStamp() {
        return timeStamp;
    }

    public void setTimeStamp(Date timeStamp) {
        this.timeStamp = timeStamp;
    }

    @XmlTransient
    public Collection<RelatedItems> getRelatedItemsCollection() {
        return relatedItemsCollection;
    }

    public void setRelatedItemsCollection(Collection<RelatedItems> relatedItemsCollection) {
        this.relatedItemsCollection = relatedItemsCollection;
    }

    @XmlTransient
    public Collection<RelatedItems> getRelatedItemsCollection1() {
        return relatedItemsCollection1;
    }

    public void setRelatedItemsCollection1(Collection<RelatedItems> relatedItemsCollection1) {
        this.relatedItemsCollection1 = relatedItemsCollection1;
    }

    @XmlTransient
    public Collection<ProductGroups> getProductGroupsCollection() {
        return productGroupsCollection;
    }

    public void setProductGroupsCollection(Collection<ProductGroups> productGroupsCollection) {
        this.productGroupsCollection = productGroupsCollection;
    }

    @XmlTransient
    public Collection<ProductGroups> getProductGroupsCollection1() {
        return productGroupsCollection1;
    }

    public void setProductGroupsCollection1(Collection<ProductGroups> productGroupsCollection1) {
        this.productGroupsCollection1 = productGroupsCollection1;
    }

    //@XmlTransient
    public Collection<Copy> getCopyCollection() {
        return copyCollection;
    }

    public void setCopyCollection(Collection<Copy> copyCollection) {
        this.copyCollection = copyCollection;
    }

    @XmlTransient
    public Collection<Items> getItemsCollection() {
        return itemsCollection;
    }

    public void setItemsCollection(Collection<Items> itemsCollection) {
        this.itemsCollection = itemsCollection;
    }

    //@XmlTransient
    public Collection<ProductAttributes> getProductAttributesCollection() {
        return productAttributesCollection;
    }

    public void setProductAttributesCollection(Collection<ProductAttributes> productAttributesCollection) {
        this.productAttributesCollection = productAttributesCollection;
    }

    @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 Products)) {
            return false;
        }
        Products other = (Products) 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 "entities.Products[ productId=" + productId + " ]";
    }

    @Override
    public Object onCycleDetected(Context cntxt) {
         Products prod = new Products(this.productId);
         return prod;
    }
    
}

Valeu!

4 Respostas

CharlesAlves

Alterando a query para devolver os atributos desejádos, é só colocar como parametro os nomes das variaveis tipo

SELECT p.productNumber, p.description FROM Products P

já tentou assim!? Não vou dizer que tenho certeza mas acho que dá certo

J

Já tentei, não deu certo!

pmlm

Na query:

SELECT new Product(p.productNumber, p.description) FROM Products P

E tens de ter o construtor respectivo na classe:

public Products(String productNumber, String description) {  
        this.productNumber = productNumber;  
        this.description = description;    }
J

Saquei! valeu.

Criado 2 de março de 2012
Ultima resposta 2 de mar. de 2012
Respostas 4
Participantes 3