我很难弄清楚如何在某个数据库设计上正确执行 ORM。
我的架构由三个表组成:用户表、评论表和投票表。用户可以发布对相册的评论,还可以对任何评论进行正面或负面的评分。相册是从外部 API 提供的,因此架构中缺少它们的表,但引用了它们的 ID。
用户主键仅由他们的用户名组成。评论主键由评论者的用户名(即外键)和评论的相册 ID 组成。最后,投票主键由投票者的用户名、外键和投票评论的主键组成,如前所述,投票主键由评论者的用户名和评论的相册 ID 组成。
用户可以为每个单独的专辑发布评论,也可以为每个单独的评论分配投票。
这是表示架构的 ER 模型:
为了映射实体 ID,我使用了注释@IdClass,但我不确定我是否朝着正确的方向前进。我也尝试过使用@EmbeddedId注释,但结果是一样的。
这是我的实体类到目前为止的样子:
@Entity
public class User implements Serializable {
private static final long serialVersionUID = 1;
@Id @Column(name = "username")
private String username;
@Column(unique = true, nullable = false)
private String email;
@Column(name = "password", nullable = false)
private String password;
@Temporal(TemporalType.TIMESTAMP) @Column(name="signUpDate", nullable = false)
private Date signUpDate;
// empty constructor, getters, setters, equals and hashCode implementations
}
@Entity @IdClass(ReviewId.class)
public class Review implements Serializable {
private static final long serialVersionUID = 1;
@Id @ManyToOne @JoinColumn(name = "reviewerUsername", referencedColumnName = "username")
private User reviewer;
@Id @Column(name = "reviewedAlbumId")
private Long reviewedAlbumId;
@Column(name = "content", nullable = false, length = 2500)
private String content;
@Column(name = "rating", nullable = false)
private Integer rating;
@Temporal(TemporalType.TIMESTAMP) @Column(name = "publicationDate", nullable = false)
private Date publicationDate;
// empty constructor, getters, setters, equals and hashCode implementations
}
慕森卡
相关分类