我有一个_ref3
实体与Goal
有很多关系。这里Tag
是我自己的实体。我正在使用JPA来坚持。当我使用现有Goal
保存PersistentObjectException
时,它会给Goal
。其他方案(如新Tag
使用新Gaol
,使用现有Tag
编辑现有Goal
,使用新Tag
编辑现有Goal
等工作正常。下面是我的实体结构:
Tag
@Entity
@Table(name = "goal")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "goal")
public class Goal implements Serializable {
private static final long serialVersionUID = 1L;
@ManyToMany(cascade = {
CascadeType.MERGE,
CascadeType.PERSIST,
},targetEntity = Tag.class)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@JoinTable(name = "goal_tag",
joinColumns = @JoinColumn(name="goals_id", referencedColumnName="ID"),
inverseJoinColumns = @JoinColumn(name="tags_id", referencedColumnName="ID"))
private Set<Tag> tags = new HashSet<>();
//getters & setters
@Entity
@Table(name = "tag")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "tag")
public class Tag implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private String id;
@ManyToMany(mappedBy = "tags")
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Goal> goals = new HashSet<>();
//getters & setters
} 请帮帮我。
答案 0 :(得分:0)
当您尝试使用save
时,持久性提供程序尝试级联的操作是PERSIST
。当您尝试保留已分离的现有实体时,您最终会遇到该异常。
由于你在该关系上设置了MERGE级联选项,我建议使用merge而不是persist:
goal = goalRepository.merge(goal);
现在,如果您的目标是一个新实体,它将被保留并分离标记实体将被合并(如果持久性提供者发现状态发生变化,则更新)。