2017-04-16 3 views
0

Ich habe 4 Einheiten: Play, Actor, Play-Darstellung und Kategorie. Jedes Stück gehört zu einer Kategorie und Spielrepräsentation assoziiert ein Spiel mit einem Theater und einer Anzahl von Schauspielern zu einer bestimmten Zeit. Hier sind die Entitäten:Hibernate ist keine verschachtelte Beziehung

@Entity 
@Table(name = "category") 
public class Category { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private int id; 

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

    @OneToMany(mappedBy="category") 
    private List<Play> playList = new ArrayList<Play>(); 

@Entity 
@Table(name = "actor") 
public class Actor { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private long id; 

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

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

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

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

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinTable(name = "play_representation_category", 
      joinColumns = {@JoinColumn(name = "actor_id")}, 
      inverseJoinColumns = {@JoinColumn(name = "play_representation_id")}) 
    private Set<PlayRepresentation> playRepresentations = new HashSet<>(0); 

@Entity 
@Table(name = "play") 
public class Play { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private int id; 

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

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

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

    @NotNull 
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    private Category category; 

@Entity 
@Table(name = "play_representation") 
public class PlayRepresentation { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private int id; 

    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "play_id") 
    private Play play; 

    @OneToOne 
    @JoinColumn(name = "theater_id") 
    private Theater theater; 

    @Column(name = "date") 
    private Timestamp airingDate; 

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinTable(name = "play_representation_category", 
      joinColumns = {@JoinColumn(name = "play_representation_id", nullable=false)}, 
      inverseJoinColumns = {@JoinColumn(name = "actor_id", nullable=false)}) 
    private Set<Actor> actors = new HashSet<>(0); 

Das Problem, das ich habe, ist, dass Hibernate versucht, eine Beziehung zwischen play_representation und Kategorie zu finden ! Ich habe versucht, die Beziehung für die Spiele fortzusetzen, aber es scheint, dass ich das falsch verstanden habe und nicht den besten Weg finde, es zu tun ... Es ist übrigens eine postgresql db.

Ich lerne immer noch, also, wenn Sie irgendwelche anderen Tipps bezüglich des Codes haben, den ich geteilt habe, lass es mich wissen!

Edit: Fehler ist:

org.postgresql.util.PSQLException: ERROR: relation "play_representation_category" does not exist 
    Position: 281 
+0

und die Fehlermeldung ist?! –

+0

Ihr ManyToMany ist bidirektional, aber Sie haben 'mappedBy' nicht gesetzt, um sie zu verknüpfen. –

Antwort

0

ich kein mappedBy brauchte, war es eigentlich ein Tippfehler - ich play_representation_category statt play_representation_actors schrieb. Ziemlich dumm, nicht wahr? Zumindest habe ich es endlich gefunden :)

+1

Nun, Sie brauchen ein mappedBy, wenn diese Beziehung BIDIRECTIONAL ist. Ansonsten sind es zwei unabhängige Beziehungen, und Sie werden das Problem später bekommen –

+0

Ok, ich werde das überprüfen! Vielen Dank! –

Verwandte Themen