开发者

problem with select statement in many to one relational in EJB3 and JSF

Hi All i wonder how to select between many to one relational i have two table Sub_category and Items sub category is own of relational, it contain list of Items

Two class follow:

@Entity
@Table(name = "item")
@NamedQueries({
    @NamedQuery(name = "Items.findAll", query = "SELECT i FROM Items i"),
    @NamedQuery(name = "Items.findByItemid", query = "SELECT i FROM Items i WHERE i.itemid = :itemid"),
    @NamedQuery(name = "Items.findByItemName", query = "SELECT i FROM Items i WHERE i.itemName = :itemName"),
    @NamedQuery(name = "Items.findByItemDescribe", query = "SELECT i FROM Items i WHERE i.itemDescribe = :itemDescribe"),
    @NamedQuery(name = "Items.findByImg", query = "SELECT i FROM Items i WHERE i.img = :img"),
    @NamedQuery(name = "Items.findByInstock", query = "SELECT i FROM Items i WHERE i.instock = :instock"),
    @NamedQuery(name = "Items.findByPrice", query = "SELECT i FROM Items i WHERE i.price = :price"),
    @NamedQuery(name = "Items.findByFine", query = "SELECT i FROM Items i WHERE i.fine = :fine"),
    @NamedQuery(name = "Items.findByDateexp", query = "SELECT i FROM Items i WHERE i.dateexp = :dateexp"),
    @NamedQuery(name = "Items.findByAuthor", query = "SELECT i FROM Items i WHERE i.author = :author"),
    @NamedQuery(name = "Items.findByToprent", query = "SELECT i FROM Items i WHERE i.toprent = :toprent"),
    @NamedQuery(name = "Items.findByStatus", query = "SELECT i FROM Items i WHERE i.status = :status")})
public class Items implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "itemid")
    private Integer itemid;
    @Basic(optional = false)
    @Column(name = "item_name")
    private String itemName;
    @Column(name = "item_describe")
    private String itemDescribe;
    @Lob
    @Column(name = "item_detail")
    private String itemDetail;
    @Column(name = "img")
    private String img;
    @Basic(optional = false)
    @Column(name = "instock")
    private int instock;
    @Basic(optional = false)
    @Column(name = "price")
    private BigDecimal price;
    @Basic(optional = false)
    @Column(name = "fine")
    private BigDecimal fine;
    @Basic(optional = false)
    @Column(name = "dateexp")
    private int dateexp;
    @Column(name = "author")
    private String author;
    @Column(name = "toprent")
    private Integer toprent;
    @Column(name = "status")
    @Enumerated(EnumType.STRING)
    private ItemStatus status;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "item")
    private List<RentItem> rentItemList;
    @JoinColumn(name = "cat_id", referencedColumnName = "subcatid")
    @ManyToOne(optional = false)
    private SubCat subCat;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "item")
    private List<Cart> cartList;

    public Items() {
    }

    public Items(Integer itemid) {
        开发者_JAVA百科this.itemid = itemid;
    }

    public Items(Integer itemid, String itemName, int instock, BigDecimal price, BigDecimal fine, int dateexp) {
        this.itemid = itemid;
        this.itemName = itemName;
        this.instock = instock;
        this.price = price;
        this.fine = fine;
        this.dateexp = dateexp;
    }

    public Integer getItemid() {
        return itemid;
    }

    public void setItemid(Integer itemid) {
        this.itemid = itemid;
    }

    public String getItemName() {
        return itemName;
    }

    public void setItemName(String itemName) {
        this.itemName = itemName;
    }

    public String getItemDescribe() {
        return itemDescribe;
    }

    public void setItemDescribe(String itemDescribe) {
        this.itemDescribe = itemDescribe;
    }

    public String getItemDetail() {
        return itemDetail;
    }

    public void setItemDetail(String itemDetail) {
        this.itemDetail = itemDetail;
    }

    public String getImg() {
        return img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public int getInstock() {
        return instock;
    }

    public void setInstock(int instock) {
        this.instock = instock;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public BigDecimal getFine() {
        return fine;
    }

    public void setFine(BigDecimal fine) {
        this.fine = fine;
    }

    public int getDateexp() {
        return dateexp;
    }

    public void setDateexp(int dateexp) {
        this.dateexp = dateexp;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Integer getToprent() {
        return toprent;
    }

    public void setToprent(Integer toprent) {
        this.toprent = toprent;
    }

    public ItemStatus getStatus() {
        return status;
    }

    public void setStatus(ItemStatus status) {
        this.status = status;
    }

    public List<RentItem> getRentItemList() {
        return rentItemList;
    }

    public void setRentItemList(List<RentItem> rentItemList) {
        this.rentItemList = rentItemList;
    }

    public SubCat getSubCat() {
        return subCat;
    }

    public void setSubCat(SubCat subCat) {
        this.subCat = subCat;
    }

    public List<Cart> getCartList() {
        return cartList;
    }

    public void setCartList(List<Cart> cartList) {
        this.cartList = cartList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (itemid != null ? itemid.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 Items)) {
            return false;
        }
        Items other = (Items) object;
        if ((this.itemid == null && other.itemid != null) || (this.itemid != null && !this.itemid.equals(other.itemid))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.entity.Item[itemid=" + itemid + "]";
    }

}

and subcategory class :

@Entity
@Table(name = "sub_cat")
@NamedQueries({
    @NamedQuery(name = "SubCat.findAll", query = "SELECT s FROM SubCat s"),
    @NamedQuery(name = "SubCat.findBySubcatid", query = "SELECT s FROM SubCat s WHERE s.subcatid = :subcatid"),
    @NamedQuery(name = "SubCat.findBySubcatName", query = "SELECT s FROM SubCat s WHERE s.subcatName = :subcatName")})
public class SubCat implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "subcatid")
    private Integer subcatid;
    @Basic(optional = false)
    @Column(name = "subcat_name")
    private String subcatName;
    @JoinColumn(name = "cat_parent", referencedColumnName = "cate_id")
    @ManyToOne(optional = false)
    private Category category;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "subCat")
    private List<Items> itemList;

    public SubCat() {
    }

    public SubCat(Integer subcatid) {
        this.subcatid = subcatid;
    }

    public SubCat(Integer subcatid, String subcatName) {
        this.subcatid = subcatid;
        this.subcatName = subcatName;
    }

    public Integer getSubcatid() {
        return subcatid;
    }

    public void setSubcatid(Integer subcatid) {
        this.subcatid = subcatid;
    }

    public String getSubcatName() {
        return subcatName;
    }

    public void setSubcatName(String subcatName) {
        this.subcatName = subcatName;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    public List<Items> getItemList() {
        return itemList;
    }

    public void setItemList(List<Items> itemList) {
        this.itemList = itemList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (subcatid != null ? subcatid.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 SubCat)) {
            return false;
        }
        SubCat other = (SubCat) object;
        if ((this.subcatid == null && other.subcatid != null) || (this.subcatid != null && !this.subcatid.equals(other.subcatid))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.entity.SubCat[subcatid=" + subcatid + "]";
    }

}

i have stateless bean for handle subcat such as:

@Stateless
@LocalBean
public class SubCatDAO {
    @PersistenceContext(unitName = "mcGrawLibPro-ejbPU")
    private EntityManager em;


    public List<SubCat> retrieveAllSubCat(){
        return em.createNamedQuery("SubCat.findAll").getResultList();
    }

    public SubCat updateSubCat(SubCat sc){
        return em.merge(sc);
    }

    public void deleteSubCat(SubCat sc){
        em.remove(em.merge(sc));
    }

    public SubCat addSubCat(SubCat sc){
        em.persist(sc);
        return sc;
    }

    public void persist(Object object) {
        em.persist(object);
    }

     public List<Category> retrieveAllCat(){
        return em.createNamedQuery("Category.findAll").getResultList();
    }


    public List<Items> getAllItemsSubCat(SubCat sub){

        em.refresh(em.merge(sub));
        List<Items> items = sub.getItemList();
        ArrayList<Items> toReturn =  new ArrayList<Items>(items.size());
        for(Items iItem : items){
            toReturn.add(iItem);
        }
        return toReturn;
    }
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

}

as you can see in stateless bean of subcat , i have written one method return List and in JSF Managed Bean of subcat i write one method return List to view (JSF)

such as:

  public List<Items> getAllItemsSub(){

    return subCatDAO.getAllItemsSubCat(sub);
}

(subCatDAO is Stateless bean)

also in JSF Managened Bean of subcat i inital subcat follow:

public BeanConstructor(){
  sub = new SubCat(1);
}

my problem is in view (JSF ) i was print list of items to show to user , but i can't get anything,i just see blank, my code sample :

<h:ouputText value="#{bean.allItemSub.itemid}"/>

when i print bean.allItemSub it return [] <=== why it empty?


I don't really understand your implementation of the getAllItemsSubCat(SubCat sub) method in your EJB. I would rewrite it like this.

First, add a named query to find Items for given a SubCategory:

@NamedQuery(name = "Items.findBySubCat", 
            query = "SELECT i FROM Items i WHERE i.subCat = :subCat")

And rewrite the EJB method as follow:

public List<Items> getAllItemsSubCat(SubCat sub){
    return em.createNamedQuery("Items.findBySubCat").setParameter("subCat", sub)
             .getResultList();
}

Then, activate SQL logging (at the JPA provider level) to make sure the method actually returns something.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜