Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA将实体的多对多字段值替换为不同的值_Java_Hibernate_Jpa - Fatal编程技术网

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();
}