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