0

我有一个简单的数据库布局。共有三个表:
Movie: move_id, title, ...
User: user_id, username, ...
Rating: rating, comment, ...

我想使用评级表作为中介,因为它由以下列组成:评级、评论、user_id、movie_id。

我知道这不是您想要做的事情的方式,而是为评级创建另一个表并拥有自己的 PK,但是您将如何在 Hibernate 中实现这种结构?

谢谢。

4

2 回答 2

0

您可以为 Rating 实体使用带有 user_id 和 movie_id 的复合主键。

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html#mapping-declaration-compositeid

于 2012-06-22T16:26:01.827 回答
0

我会像这样构建我的课程:

public class Movie {

  @Id
  @GeneratedValue
  private long id;

  private String name;

  @OneToMany(mappedBy = "id.movie")
  private List<Rating> ratings

}

public class Rating {

  @Embeddable
  public static class RatingId {

  @ManyToOne
  @JoinColumn(name = "movieId")
  private Movie movie;

  @ManyToOne
  @JoinColumn(name = "userId)
  private User user;

 // Equals and Hashcode which should check the associated tables @Ids

  }

  @EmbeddedId
  private RatingId id;

  private String comment;

  private int rating;

}

public class User {

  @Id
  @GeneratedValue
  private long id;


  private String userName;
}

评级表是一个连接表,并引用了用户和电影。关联位于复合标识符内,因为 Rating 是用户和电影的唯一标识符(除非用户可以发布电影的多个评分?)。使用复合键将确保如果用户要删除然后重新添加电影的评分,则不会出现重复的键违规 - Hibernate 在删除之前会插入。

于 2012-06-22T16:38:44.663 回答