Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate OneToMany与联接表_Java_Hibernate_Oracle11g_Orm - Fatal编程技术网

Java Hibernate OneToMany与联接表

Java Hibernate OneToMany与联接表,java,hibernate,oracle11g,orm,Java,Hibernate,Oracle11g,Orm,我有一个电影实体和一个流派实体。我如何插入一部电影,该电影的流派实体由它的名称给出 例如,类型表 +----+--------+ | id | name | +----+--------+ | 1 | Action | | 2 | Drama | +----+--------+ 电影桌 +----+----------+ | id | name | +----+----------+ | 1 | Movie 1 | | 2 | Movie 2 | +----+----

我有一个电影实体和一个流派实体。我如何插入一部电影,该电影的流派实体由它的名称给出

例如,类型表

+----+--------+
| id |  name  |
+----+--------+
|  1 | Action |
|  2 |  Drama |
+----+--------+
电影桌

+----+----------+
| id |   name   |
+----+----------+
|  1 | Movie 1  |
|  2 |  Movie 2 |
+----+----------+
联接表

+----+----------+-----------+
| id | movie_id | genre_id  |
+----+----------+-----------+
|  1 |        1 |         1 |
|  2 |        1 |         1 |
|  3 |        1 |         2 |
+----+----------+-----------+
体裁实体

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "GENRE")
public class GenreEntity {

    @Id
    @Column(name = "id")
    @GeneratedValue(generator="increment2")
    @GenericGenerator(name="increment2", strategy = "increment") 
    private int id;

    @Column(unique = true,name="name")
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public GenreEntity(){

    }

    public String getName() {
        return name;
    }

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

}
电影实体

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "MOVIE")
public class MovieEntity {
    @Id
    @Column(name = "id")
    @GeneratedValue(generator="increment")
    @GenericGenerator(name="increment", strategy = "increment") 
    private int id;

    @Column(name = "RELEASE_DATE")
    private Date releaseDate;

    @Column(name = "name")
    private String name;

    @Column(name = "rating")
    private double rating;

    @Column(name = "length")
    private int length;

    @Column(name = "casting")
    private String casting;

    @Column(name = "director")
    private String director;

    @Column(name = "description")
    private String description;

    @Column(name = "writer")
    private String writer;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinTable(
               name = "CATEGORY", 
               joinColumns = @JoinColumn(name = "movie_id")
             )
    private List<GenreEntity> genre = new ArrayList<>();

    public List<GenreEntity> getGenre() {
        return genre;
    }

    public MovieEntity(){

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Date getReleaseDate() {
        return releaseDate;
    }

    public void setReleaseDate(Date releaseDate) {
        this.releaseDate = releaseDate;
    }

    public String getName() {
        return name;
    }

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

    public double getRating() {
        return rating;
    }

    public void setRating(double rating) {
        this.rating = rating;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }

    public String getCasting() {
        return casting;
    }

    public void setCasting(String casting) {
        this.casting = casting;
    }

    public String getDirector() {
        return director;
    }

    public void setDirector(String director) {
        this.director = director;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getWriter() {
        return writer;
    }

    public void setWriter(String writer) {
        this.writer = writer;
    }

}
添加电影时,我希望在html和hibernate中有一个select标记,以便在联接表中添加流派,而不是插入流派表和联接表

如何识别这些类型,以便hibernate不再插入它们


最后,我想转到一个页面,键入一个电影名称,然后选择适用于该电影的多种类型并提交。

首先,关联是多种类型的。显然,有几部电影属于同一类型

第二,选择框没有理由使用流派名称作为其选项的值。它应该使用ID,并使用名称作为选项的标签

因此,它归结为以下问题:给定选定类型的ID,如何使用选定类型创建电影。anser很简单:使用ID从数据库中获取类型(使用
Session.get()
Session.load()
,或
EntityManager.find()
EntityManager.getReference()
)。然后将这些类型实例存储在所创建电影的类型列表中

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import eu.ubis.fiimdb.db.entity.GenreEntity;
import eu.ubis.fiimdb.db.entity.MovieEntity;

@WebServlet("/addmovie")
public class AddMovie extends HttpServlet {
    private String message;

    public void init() throws ServletException
      {
          // Do required initialization
          message = "Hello World";
      }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        // Set response content type
        response.setContentType("text/html");

         SessionFactory factory = new Configuration()
                 .configure("/META-INF/hibernate.cfg.xml")
                 .buildSessionFactory();
         Session session=factory.getCurrentSession();

        Transaction transaction = null;
        try {
            transaction = session.beginTransaction();
            MovieEntity a = new MovieEntity();
            GenreEntity b = new GenreEntity();
            GenreEntity c = new GenreEntity();
            b.setName("Alex");
            a.setName("teeefasd");
            c.setName("HGFHFG");
            a.getGenre().add(b);
            a.getGenre().add(c);

            session.persist(a);
            transaction.commit();
        } catch (HibernateException e) {
            transaction.rollback();
            e.printStackTrace();
        } finally {
            session.close();
        }

    }
}