2017-04-16 75 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

好吧,我会检查出来的!谢谢! –