2017-04-16 7 views
0

私は4つのエンティティを持っています:プレイ、アクタ、プレイ表現、カテゴリ。 各演劇はカテゴリに属し、演劇表現は演劇をある時間に演劇および多数の俳優と関連付ける。ここ は、エンティティは、次のとおりです。Hibernateはネストされた関係を永続化していません

@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); 

私がいる問題は、Hibernateがplay_representationとカテゴリとの関係を発見しようとしていることです!私は演劇のための関係を維持しようとしてきましたが、それは私が間違っているようだし、それを行うための最善の方法を理解することができない...それはポストデータベースのDBです。

私はまだ学んでいますので、私が共有したコードに関するヒントがあればお知らせください!

編集:エラーは、次のとおりです。

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

エラーメッセージは? –

+0

ManyToManyは双方向ですが、 'mappedBy'をリンクさせていません。 –

答えて

0

私はmappedByを必要としなかったが、それは実際にタイプミスだった - 私はplay_representation_actorsの代わりにplay_representation_categoryを書きました。かなりばかげた、ハァッ?少なくとも私はそれを見つけました:)

+1

その関係がBIDIRECTIONALの場合はmappedByが必要です。それ以外の場合は、2つの独立した関係であり、後で問題を解決します。 –

+0

これを確認します。ありがとう! –

関連する問題