注意:我是一个休眠的新手。我目前正在尝试在春季对具有相同主键和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对象。如果有人可以帮助,那就太好了!
2 回答
![?](http://img1.sycdn.imooc.com/54584d9f0001043b02200220-100-100.jpg)
catspeake
TA贡献1111条经验 获得超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
提交
取消