Связь ManyToMany с jointable - PullRequest
       1

Связь ManyToMany с jointable

1 голос
/ 13 сентября 2010

Категория EJB

package session;

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

Элемент 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);
    }
}

Сервлет для сохранения 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();
        }
    } 

}

Элемент 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 = :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;
    }

}

Я пытаюсь сохранить данные, используя это кодирование, но поле получают только таблицы категорий и элементов (здесь нет кодирования категорий, это нормально), моя вспомогательная таблица item_cat не получает сохраняемые данные.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2010

Убедитесь, что вы устанавливаете сущности с обеих сторон, прежде чем сохранять их. Примерно так:

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

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

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

Было бы очень полезно, если бы вы опубликовали модель категории.

0 голосов
/ 13 сентября 2010

Если у вас есть таблица промежуточного соединения, вам нужно использовать аннотацию @JoinTable:

@JoinTable(name="item_cat", joinColumns={ @JoinColumn(name="item_id") }, inverseJoinColumns={ @JoinColumn(name="category_id") })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...