2010-09-13 4 views
1

Catégorie EJBrelation ManyToMany avec joinTable

package session; 

import com.Entity.Category; 
import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

Item EJB

package session; 

import com.Entity.Item; 
import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

@Stateless 
public class saveItemBean implements saveItemRemote { 

    @PersistenceContext 
    private EntityManager em; 

    public void saveItem(Item itm) { 
     em.persist(itm); 
    } 

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

Servlet pour sauver de l'article

package src; 

import com.Entity.Item; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.List; 
import javax.ejb.EJB; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import session.CategoryFacadeRemote; 
import session.saveItemRemote; 

public class saveItemAndIemCategory extends HttpServlet { 
    @EJB 
    private saveItemRemote saveItemBean; 

    @EJB 
    private CategoryFacadeRemote categoryFacadeBean; 

    processRequest(HttpServletRequest request, HttpServletResponse response) { 
     try { 
      Item itm = new Item(); 
      itm.setName("HelloNew"); 
      saveItemBean.saveItem(itm); 
     } catch (Exception e) { 
      e.printStackTrace();  
     } finally { 
      out.close(); 
     } 
    } 

} 

article Bean entité

package com.Entity; 

import java.io.Serializable; 
import java.util.List; 
import javax.persistence.Basic; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.JoinTable; 
import javax.persistence.ManyToMany; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.Table; 

@Entity 
@Table(name = "item") 
@NamedQueries({@NamedQuery(name = "Item.findAll", query = "SELECT i FROM Item i"), @NamedQuery(name = "Item.findByItemId", query = "SELECT i FROM Item i WHERE i.itemId = :itemId"), @NamedQuery(name = "Item.findByName", query = "SELECT i FROM Item i WHERE i.name = :name")}) 
public class Item implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "item_id") 
    private Integer itemId; 

    @Basic(optional = false) 
    @Column(name = "name") 
    private String name; 

    @ManyToMany 
    @JoinTable(name = "item_cat", 
     joinColumns = {@JoinColumn(name = "item_id", referencedColumnName = "item_id")}, 
     inverseJoinColumns = {@JoinColumn(name = "cat_id", referencedColumnName = "cat_id")}) 
    private List<Category> categoryCollection; 

    public Item() { 
    } 

    public Item(Integer itemId) { 
     this.itemId = itemId; 
    } 

    public Item(Integer itemId, String name) { 
     this.itemId = itemId; 
     this.name = name; 
    } 

    public Integer getItemId() { 
     return itemId; 
    } 

    public void setItemId(Integer itemId) { 
     this.itemId = itemId; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public List<Category> getCategoryCollection() { 
     return categoryCollection; 
    } 

    public void setCategoryCollection(List<Category> categoryCollection) { 
     this.categoryCollection = categoryCollection; 
    } 

} 

J'essaye de persister des données en utilisant ces codes mais seulement les tables Category et Item obtiennent un champ (le codage de catégorie manque ici, elles sont correctes) ma table assosiative item_cat n'obtient pas de données sauvegardées.

Répondre

0

Si vous avez une table de jointure intermédiaire, vous devez utiliser l'annotation @JoinTable:

@JoinTable(name="item_cat", joinColumns={ @JoinColumn(name="item_id") }, inverseJoinColumns={ @JoinColumn(name="category_id") }) 
+0

oui j'ai utilisé @joinTable quelque chose de mal avec servlet comme je le sens – Razor

+0

Je suppose que je n'ai pas compris quel était le problème, alors. Pouvez-vous clarifier un peu, s'il vous plaît, et nettoyer votre message afin que votre code soit formaté en blocs de code? – RMorrisey

0

Assurez-vous que vous définissez les entités des deux côtés avant de les persister. Quelque chose comme ceci:

Item itm = new Item(); 
itm.setName("NewItem"); 

Category cat = new Category(); 
cat.setName("NewCategory"); 

itm.getCategoryCollection().add(cat); 
cat.getItemCollection().add(itm); 

Il serait très utile si vous postez votre modèle de catégorie.

Questions connexes