注意:我是一个休眠的新手。
我目前正在尝试在春季对具有相同主键和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对象。
如果有人可以帮助,那就太好了!
catspeake
相关分类