我有一个问题实体,其中包含另一个名为“Alternatives”的实体列表,如下所示:
public class Question {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "question", cascade = CascadeType.ALL)
@JsonManagedReference
private List<Alternative> alternativeList;
}
public class Alternative implements Serializable {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "questionId", nullable = false)
@JsonBackReference
private Question question;
}
我想更新一个已存在的问题条目,用一个新的备选列表来替换它。为此,我正在使用我的JpaDao元素的合并方法与新的问题对象进行调用:
@Repository
public class JpaQuestionDao implements QuestionDao {
@PersistenceContext
private EntityManager em;
@Transactional
public Question update(Question question) {
return em.merge(question);
}
}
然而,实际上这是合并了两个列表:一个已经存在于数据库中的和提供的新列表。对于非列表对象我使用merge方法没有问题,这就是为什么我一直在使用merge方法。
有没有另一种方法不是合并而只更新列表?
Question
是关联的反向侧。但是,orphanRemoval
将起作用(在Alternative
中,question
不可为空,因此我认为OP的意图是删除未使用的Alternative
)。 - Dragan Bozanovic