Java JPA将实体的多对多字段值替换为不同的值
我有一个名为Java JPA将实体的多对多字段值替换为不同的值,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个名为Artwork的实体,其中一个名为subjects的成员与另一个实体进行了多对多映射,如下所示 @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) private List<ArtSubject> subjects; 在此之后,我将艺术品保存为artRepository(CRUD Repository)artRepository.save(artwork) 请帮我做这个 提前谢谢 试试下面的方法
Artwork
的实体,其中一个名为subjects的成员与另一个实体进行了多对多映射,如下所示
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<ArtSubject> subjects;
在此之后,我将艺术品保存为artRepository(CRUD Repository)artRepository.save(artwork)
请帮我做这个
提前谢谢 试试下面的方法
对于Collection(List)
(article.setSubjects(new ArrayList());
)您必须clear()
现有的。这是因为如果Hibernate
从数据库加载实体(及其集合),它将“管理”它们,即跟踪它们的更改。通常在使用Hibernate时,最好不要为集合(列表、集合)创建任何setter
。仅创建getter,并清除它返回的集合,即:
artwork.getSubject().clear();
此外,请使用“孤立删除”(即,从父对象集合中删除子对象时将其删除)。在拥有的实体中添加
@OneToMany(orphanRemoving=true)
。试试这个,我正在尝试保存一个也有OneToMany关系的人…我只使用saveOrUpdate,在前端,即使此人编辑了他的详细信息,我也调用相同的方法:
@Override
@Transactional
public void addPerson(Person p) {
if( session == null) {
session = this.sessionFactory.openSession();
}else {
session = this.sessionFactory.getCurrentSession();
}
session.saveOrUpdate(p);
session.flush();
}
为了保存用一对多映射的实体,我这样做:在这里,同样,如果画布细节发生了更改,也没关系,我调用相同的方法
@Override
public void addCanvas(Canvas canvas, Person person) {
int id = person.getId();
if( session == null) {
session = this.sessionFactory.openSession();
}else {
session = this.sessionFactory.getCurrentSession();
}
Person person1 = (Person) session.get(Person.class,id);
person.getCanvas1().add(canvas);
canvas.setPerson1(person1);
session.merge(canvas);
session.flush();
}
您使用的是
save()
还是saveOrUpdate()
?@Junaid-我使用的是artworkRepo.save(List)为什么要保存列表??应该是这样的。1) artworkRepo.setSubjects(newpublist)
2)session.saveOrUpdate(artworkRepo)
您能否提供有关如何保存的更多详细信息?您使用的是spring吗?您能提供保存列表的函数代码吗。。!!
@Override
public void addCanvas(Canvas canvas, Person person) {
int id = person.getId();
if( session == null) {
session = this.sessionFactory.openSession();
}else {
session = this.sessionFactory.getCurrentSession();
}
Person person1 = (Person) session.get(Person.class,id);
person.getCanvas1().add(canvas);
canvas.setPerson1(person1);
session.merge(canvas);
session.flush();
}