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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

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

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


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它有點(diǎn)老派,但@EmbeddedId更干凈,消除了實(shí)體及其密鑰中重復(fù)的代碼。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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