2017-04-16 77 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和類別之間的關係!我一直試圖堅持關係的戲劇,但它似乎我得到了錯誤,無法找出最好的辦法做到這一點...這是一個postgresql數據庫順便說一句。

我還在學習,所以如果您有關於我分享的代碼的任何其他提示,請讓我知道!

編輯:錯誤是:

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

和錯誤信息是?! –

+0

你的ManyToMany是雙向的,但你還沒有把'mappedBy'鏈接到它們 –

回答

0

我並不需要的mappedBy,它實際上是一個錯字 - 我寫play_representation_category代替play_representation_actors的。很愚蠢,是吧?至少我終於找到了:)

+1

那麼你確實需要一個mappedBy,如果這個關係是雙向的。否則,它是兩個獨立的關係,你會在以後得到問題 –

+0

好吧,我會檢查出來的!謝謝! –