在Servlet中休眠多对多

时间:2015-05-13 02:48:57

标签: java hibernate jsp servlets

使用Servlet在Web应用程序中实现 Hibernate Many to Many 关联时遇到问题。

我的 POJO 类在Set中有类类型变量。

@Entity
@Table(name = "buku")
public class Buku {

    @Id
    @GeneratedValue
    @Column(name = "uid")
    private long id;

    @Column(length = 150)
    private String judul;

    @Column(name = "tgl_terbit")
    private Date tglTerbit;

    @Column(length = 150)
    private String penerbit;

    @ManyToMany(mappedBy = "bukus")
    private Set<Kategori> kategories;

    public Buku() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Buku(String judul, Date tglTerbit, String penerbit,
            Set<Kategori> kategories) {
        super();
        this.judul = judul;
        this.tglTerbit = tglTerbit;
        this.penerbit = penerbit;
        this.kategories = kategories;
    }

    // Getter and Setter

这是另一个班级

@Entity
@Table(name = "kategori")
public class Kategori {

    @Id
    @GeneratedValue
    @Column(name = "uid")
    private long id;

    private String namaKategori;

    private String deskripsi;

    @ManyToMany
    @JoinTable(name = "kategori_buku",
                joinColumns = @JoinColumn(name = "kategori_id"),
                inverseJoinColumns = @JoinColumn(name = "buku_id"))
    private Set<Buku> bukus;

    // Getter and Setter

我的组合框包含Kategori个数据。 但是,在JSP文件中,组合框值只保留int的{​​{1}}值。 我在我的Servlet中得到了这样的价值:

id_kategori

问题是,我需要将对象作为参数传递给我的DAO&amp;控制器。

...
int kategori = Integer.parseInt(request.getParameter("id_kategori"));
...
if (idBuku.equals("") || idBuku.isEmpty()) {
        controller.save(judul, penerbit, tglTerbit, kategori);
    } else {
        // Do Update
    }
...

这是我目前的控制器。

...
    // DAO
    @Override
    public void insert(Buku b) {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();

        session.save(b);
        session.getTransaction().commit();
    }
...

我被困在我的控制器中。 我如何才能从... public void save(String judul, String penerbit, Date tglTerbit, int idKategori) { Buku b = new Buku(); b.setJudul(judul); b.setPenerbit(penerbit); b.setTglTerbit(tglTerbit); // Select from kategori table // I stuck in this. How i create object of kategori??? dao.insert(b); } ... 创建 kategori 对象?如果我首先选择数据库并构建一个对象,那就太慢了。

谢谢。 ^^

1 个答案:

答案 0 :(得分:0)

您无需从数据库中检索。 首先,您必须使您的实体Kubu成为拥有方,并在Kategori实体中移动您的mappedBy属性。 然后,您可以实例化一个新的Kategori实例,只设置其id字段,当您插入时,Hibernate也会在连接表中保留。

...
Kategori kategori = new Kategori();
kategori.setId(idKategori);
b.setKategories(new HashSet<>());
b.getKategories().add(kategori);
...