Java 尝试更新整个对象时发生TransientObject异常

Java 尝试更新整个对象时发生TransientObject异常,java,spring-boot,hibernate,jpa,Java,Spring Boot,Hibernate,Jpa,我正在检查数据库中是否已经存在一个对象&如果存在,则更新整个对象;如果不存在,则创建新对象。但是,在应用程序启动时,我遇到以下异常: Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.model.Students 我在网上查找了它,但更多的答案与关

我正在检查数据库中是否已经存在一个对象&如果存在,则更新整个对象;如果不存在,则创建新对象。但是,在应用程序启动时,我遇到以下异常:

Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.model.Students
我在网上查找了它,但更多的答案与关系映射有关,但我的表与任何其他表都没有关系。我不知道该怎么办。请帮忙

这是我的模型:

@Data
@Entity
@Table(name="tbl_student")
public class Students extends People {

    @Id
    @GeneratedValue(strategy=GenerationType.Auto)
    @Column(name="id",insertable =false,nullable = false,updatable = false)
    private Long id;
    
    private int rollNo;

    private String address;

    private String email;

    @Convert(converter = StringListConverter.class)
    private List<String> subjects;

}
我的回购协议:

public interface StudentsRepository extends JpaRepository<Students,Long> {

    @Transactional
    @Modifying
    @Query("update Students s set s = :updatedStudent WHERE s.name = :name")
    void updateStudent(@Param("name") String name, @Param(updatedStudent) Students updatedStudent);

Optional<Students> findByName(String name);

}

如果我正确地理解了引发异常的源代码,那么具有瞬态引用的不是
学生
类,而是引用

这意味着您可能还保存了其他引用需要保存的
Students
实例的内容

public interface StudentsRepository extends JpaRepository<Students,Long> {

    @Transactional
    @Modifying
    @Query("update Students s set s = :updatedStudent WHERE s.name = :name")
    void updateStudent(@Param("name") String name, @Param(updatedStudent) Students updatedStudent);

Optional<Students> findByName(String name);

}
 if(studentsRepository.findByName(value.getName()).isPresent())
                        {
                            studentsRepository.updatestudents(value.getName(),value);
                        }else {
                            studentsRepository.saveAndFlush(value);

                        }