gpt4 book ai didi

java - Spring Data : issue with OneToMany, 子级未正确保存

转载 作者:行者123 更新时间:2023-11-30 01:59:58 24 4
gpt4 key购买 nike

我在处理 @OneToMany 关系时遇到问题。

这是我的代码:

@Entity
@Table(name = "type_mouvement")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class TypeMouvement implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@OneToMany(mappedBy="typeMouvement", fetch = FetchType.EAGER,cascade = CascadeType.PERSIST)
private List<CompteTypeMouvement> comptes;
...
}

@Entity
@Table(name = "type_mouvement_comptes")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class CompteTypeMouvement implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private String numCompte;

@ManyToOne
private TypeMouvement typeMouvement;
...
}

我如何使用这些实体:

TypeMouvement typeMouvementFromDB = typeMouvementRepository.findOne(new Long(1));
CompteTypeMouvement compte = new CompteTypeMouvement();
compte.setNumCompte("123");
compte.setTypeMouvement(typeMouvementFromDB);
typeMouvementFromDB.getComptes().add(compte);
typeMouvementRepository.save(typeMouvementFromDB);

我得到的结果:

enter image description here

我以为我会得到:

enter image description here

为什么我保存TypeMouvement时,CompteTypeMouvement的属性没有填充?

最佳答案

您正在尝试调用保存传递一个已经存在的实体:

TypeMouvement typeMouvementFromDB = typeMouvementRepository.findOne(new Long(1));
typeMouvementRepository.save(typeMouvementFromDB);

该关系仅具有持久级联类型:

@OneToMany(mappedBy="typeMouvement", fetch = FetchType.EAGER,cascade = CascadeType.PERSIST)
private List<CompteTypeMouvement> comptes;

保存实现如下(spring-data-jpa-1.11.3):

public <S extends T> S save(S entity) {

if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}

这意味着将调用merge而不是persist

如果您添加 merge 来级联,它应该可以工作:

@OneToMany(mappedBy="typeMouvement", fetch = FetchType.EAGER,
cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private List<CompteTypeMouvement> comptes;

关于java - Spring Data : issue with OneToMany, 子级未正确保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53224098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com