注意:我是一個休眠的新手。我目前正在嘗試在春季對具有相同主鍵和OneToOne關系的2個實體進行建模。表格1 :CREATE TABLE person (id uuid NOT NULL,name varchar(10000),CONSTRAINT pk_person_id PRIMARY KEY (id))表2:CREATE TABLE nickname (id uuid NOT NULL,nick varchar(10000),CONSTRAINT pk_nickname_id PRIMARY KEY (id),CONSTRAINT fk_person_id FOREIGN KEY (id) REFERENCES person(id) ON DELETE CASCADE)Java類:@Getter@Setter@NoArgsConstructor@Entity@ToString@Table(name = "Person")public class Person { @Id private UUID id; @Column(name = "name") private String name;}@Getter@Setter@NoArgsConstructor@Entity@ToString@Table(name = "person")public class NickName { @Id private UUID id; @Column(name = "nick") private String nick; @MapsId @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "id") private Person person;} 1)我想要的行為是允許單獨保存Person類的對象,即不要將它們保存為保存昵稱的調(diào)用的一部分。2)對于個人的子集,我不妨創(chuàng)建一個昵稱。在該假設示例中,每個人只能有一個昵稱。3)保存昵稱時,我不希望此人對象也被保存??赡苁谴巳丝赡苁孪却嬖冢欠Q后來又添加了。當前,當嘗試通過NicknameRepository.save(nickname)保存昵稱對象(其中昵稱對象使用nick和person對象初始化)時,我已經(jīng)遇到有關實體已存在的異常,如果此人已經(jīng)存在。4)我確實希望主鍵ID相同,并且該ID是昵稱-> Person中的外鍵5)保存?zhèn)€人對象時,我也不想保存或添加昵稱。6)在為現(xiàn)有人員添加昵稱時,我寧愿僅傳遞人員的ID而不是整個對象。當前,我被迫全部傳遞Person對象。如果有人可以幫助,那就太好了!
2 回答

catspeake
TA貢獻1111條經(jīng)驗 獲得超0個贊
我進行了滿足我的要求的以下工作。
@Getter
@Setter
@NoArgsConstructor
@Entity
@ToString
@Table(name = "Person")
public class Person {
@Id
private UUID id;
@Column(name = "name")
private String name;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.DETACH)
@PrimaryKeyJoinColumn
@Fetch(FetchMode.JOIN)
private NickName nickName;
}
@Getter
@Setter
@NoArgsConstructor
@Entity
@ToString
@Table(name = "nickname")
public class NickName {
@Id
private UUID id;
@Column(name = "nick")
private String nick;
}
添加回答
舉報
0/150
提交
取消