Eins-zu-viele-Zuordnung im Ruhezustand (Anmerkungen)

Ich bin neu im Winterschlaf, ich versuche es zu lernen und ich bin auf ein Problem gestoßen, das versucht, die Arbeit einer Beziehung zu einem zu vielen zu machen. Ich habe mehrere Beispiele ausprobiert, aber keines scheint zu funktionieren.

Kann jemand einen Blick auf den folgenden Code werfen und mir sagen, wo ich falsch gelaufen bin. Ich habe viele verschiedene Tutorials ausprobiert, aber es funktioniert immer nicht, also muss mir etwas fehlen.

Es gibt zwei Klassen: MovieDb und Genre. Für jeden Film sollte es viele Genres geben.

Ich glaube, ich habe alle erforderlichen Dateien und Informationen hinzugefügt, wenn nicht, lassen Sie es mich wissen.

Danke für die Hilfe.

MovieDb.java

@Entity
@Table(name = "movies")
public class MovieDb extends IdElement {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @JsonProperty("id")
    @Column(name = "movieId")
    private int movieId;

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

    @JsonProperty("genres")
    @OneToMany
    private List<Genre> genres;

    public int getMovieId() { return movieId; }
    public String getTitle() { return title; }
    public List<Genre> getGenres() { return genres; }

    public void setMovieId(int movieId) { this.movieId = movieId; }
    public void setTitle(String title) { this.title = title; }
    public void setGenres(List<Genre> genres) { this.genres = genres; }
}

Genre.java

@JsonRootName("genre")
@Entity
@Table(name = "moviesGenre")
public class Genre implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="id")
    private int id;

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

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

    public int getMovieId() { return movieId; }
    public String getName() { return name; }

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

Main.java

public MovieDb getMovie(int movieId) {
    Session s = HibernateUtil.getSessionFactory().openSession();
    Transaction tx = s.beginTransaction();
    MovieDb movie = null;
    try {
        String hql = "FROM MovieDb E WHERE E.movieId = " + movieId;
        Query query = s.createQuery(hql);
        List movies = query.list();
        movie = (MovieDb)movies.get(0); 
        tx.commit();
    }catch (HibernateException ex) {
        if (tx != null) 
            tx.rollback();
    }finally {
        s.close(); 
    }
    return movie;
}

public void saveMovie(MovieDb movie) {
    Session s = HibernateUtil.getSessionFactory().openSession();
    Transaction tx = s.beginTransaction();
    try {
        s.save(movie);
        s.flush();
        tx.commit();
    } catch (HibernateException ex) {
        if (tx != null) 
            tx.rollback();
    } finally {
        s.close(); 
    }
}

Meine Datenbank ist so eingerichtet:

Filme

id          int           (primary)
movieId     int
title       varchar

moviesGenre

id          int           (primary)
movieId     int 
name        varchar

Meine Hibernate.cfg.xml-Datei mit der Zuordnung ist unten:

Hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    ...
    ...
    ...
    <mapping class="com.medialibrary.api.model.MovieDb"/>
    <mapping class="com.medialibrary.api.model.Genre"/>
  </session-factory>
</hibernate-configuration>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage