Spring数据jpa持久嵌套更改

时间:2016-02-22 06:04:37

标签: spring jpa spring-data-jpa

我有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.ALLCascadeType.PERSIST,当我尝试保存新条目时,似乎Spring Data JPA会抱怨分离的属性为:{{1 }}

有没有办法解决这个问题?

0 个答案:

没有答案