我有3个班级:
记录/个人资料/选项
@Entity
@Table(name="Record")
public class Record implements Serializable {
@Id
@GeneratedValue
private int id;
@ManyToOne(cascade=CascadeType.MERGE)
@JoinColumn(name="ProfileId")
private Profile profile;
....
}
@Entity
@Table(name="Profile")
public class Profile implements Serializable {
@Id
@GeneratedValue
private int id;
@ManyToOne(cascade=CascadeType.MERGE)
@JoinColumn(name="OptionId")
private Option option;
....
}
@Entity
@Table(name="Option")
public class Option implements Serializable {
@Id
@GeneratedValue
private int id;
private String name;
....
}
假设原始选项为“50M”,然后我将record1.profile1.option更改为“10M”
当我做record1.setId(null);recordRepository.save(record1);
时
我想从record1创建一个新条目(作为更改历史记录)。
在这种情况下,由于选项是嵌套的,因此级联类型的合并不会保留配置文件中发生的更改。因此,当我收回记录时,它仍然会说recordNew.profile1.option
是50M
但是如果我在Record类中将cascadeType更改为CascadeType.ALL
或CascadeType.PERSIST
,当我尝试保存新条目时,似乎Spring Data JPA会抱怨分离的属性为:{{1 }}
有没有办法解决这个问题?