猿问

共享主键,但要单独管理/保存实体?

注意:我是一个休眠的新手。


我目前正在尝试在春季对具有相同主键和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类的对象,即不要将它们保存为保存昵称的调用的一部分。


2)对于个人的子集,我不妨创建一个昵称。在该假设示例中,每个人只能有一个昵称。


3)保存昵称时,我不希望此人对象也被保存。可能是此人可能事先存在,而昵称后来又添加了。当前,当尝试通过NicknameRepository.save(nickname)保存昵称对象(其中昵称对象使用nick和person对象初始化)时,我已经遇到有关实体已存在的异常,如果此人已经存在。


4)我确实希望主键ID相同,并且该ID是昵称-> Person中的外键


5)保存个人对象时,我也不想保存或添加昵称。


6)在为现有人员添加昵称时,我宁愿仅传递人员的ID而不是整个对象。当前,我被迫全部传递Person对象。


如果有人可以帮助,那就太好了!


哆啦的时光机
浏览 141回答 2
2回答

catspeake

我进行了满足我的要求的以下工作。@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;}  
随时随地看视频慕课网APP

相关分类

Java
我要回答