第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確映射主鍵由兩個外鍵組成的實體,其中一個外鍵本身是復(fù)合的?

如何正確映射主鍵由兩個外鍵組成的實體,其中一個外鍵本身是復(fù)合的?

慕絲7291255 2023-10-19 21:50:01
我很難弄清楚如何在某個數(shù)據(jù)庫設(shè)計上正確執(zhí)行 ORM。我的架構(gòu)由三個表組成:用戶表、評論表和投票表。用戶可以發(fā)布對相冊的評論,還可以對任何評論進行正面或負面的評分。相冊是從外部 API 提供的,因此架構(gòu)中缺少它們的表,但引用了它們的 ID。用戶主鍵僅由他們的用戶名組成。評論主鍵由評論者的用戶名(即外鍵)和評論的相冊 ID 組成。最后,投票主鍵由投票者的用戶名、外鍵和投票評論的主鍵組成,如前所述,投票主鍵由評論者的用戶名和評論的相冊 ID 組成。用戶可以為每個單獨的專輯發(fā)布評論,也可以為每個單獨的評論分配投票。這是表示架構(gòu)的 ER 模型:為了映射實體 ID,我使用了注釋@IdClass,但我不確定我是否朝著正確的方向前進。我也嘗試過使用@EmbeddedId注釋,但結(jié)果是一樣的。這是我的實體類到目前為止的樣子:@Entitypublic 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}
查看完整描述

1 回答

?
慕森卡

TA貢獻1806條經(jīng)驗 獲得超8個贊

這些關(guān)系是“派生身份”;因此您的 ID 類應(yīng)如下所示(請注意外鍵字段的類型與其相應(yīng)實體字段的類型不同):


public class ReviewId implements Serializable {


? ? private static final long serialVersionUID = 1L;


? ? private String reviewer; // matches name of @Id attribute and type of User PK

? ? private Long reviewedAlbumId;


? ? // ...


}

public static class VoteId implements Serializable {


? ? private static final long serialVersionUID = 1L;


? ? private String voter; // matches name of @Id attribute and type of User PK

? ? private ReviewId review; // matches name of @Id attribute and type of Review PK


? ? // ...


}

JPA 2.2 規(guī)范的第 2.4.1節(jié)討論了派生身份(并附有示例)。

另外,作為旁注,@IdClass它有點老派,但@EmbeddedId更干凈,消除了實體及其密鑰中重復(fù)的代碼。


查看完整回答
反對 回復(fù) 2023-10-19
  • 1 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號