开发者

ManyToMany relation with jointable

开发者 https://www.devze.com 2023-01-16 12:34 出处:网络
Category EJB package session; import com.Entity.Category; import javax.ejb.Stateless; import javax.persistence.EntityManager;

Category EJB

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 for save Item

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();
        }
    } 

}

Item Entity Bean

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 开发者_如何学Python= :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;
    }

}

I am trying to persist data using these coding but only Category and Item tables are getting field (Category coding are missing here those are fine) my assosiative table item_cat is not getting saving data.


If you have an intermediate join table, you need to use the @JoinTable annotation:

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


Make sure you are setting the entities in both sides before persisting them. Something like this:

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

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

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

It would be very helpful if you post you Category model.

0

精彩评论

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