我有一個庫調用對象的屬性,它是一個Many-To-Many
關係的一部分問題。Java的春天 - 多對多調用錯誤 - 對象引用一個未保存的瞬態的實例
我試圖讓分配給特定課程的講師全部(讓所有的課程特定講師的作品非常好)。但是,當我打電話從倉庫下面的方法我得到的 錯誤:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: app.model.Course
的CascadeType
設置爲關係的兩個部分。
我具有以下配置:
講師
@Entity
@Table(name = "LECTURERS")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Lecturer extends AbstractUser {
@ManyToMany(fetch = FetchType.EAGER, targetEntity = Course.class, cascade = CascadeType.ALL)
@Fetch(FetchMode.SELECT)
@JoinTable(name = "COURSE_OWNERSHIPS",
joinColumns = {@JoinColumn(name = "lecturer_id")},
inverseJoinColumns = {@JoinColumn(name = "course_id")})
@JsonSerialize(using = CustomCourseListSerializer.class)
private List<Course> courses = new ArrayList<>();
...
}
場
@Entity
@Table(name = "COURSES")
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class Course implements Item, Serializable {
...
@ManyToMany(mappedBy = "courses", fetch = FetchType.EAGER, targetEntity = Lecturer.class, cascade = CascadeType.ALL)
@Fetch(value = FetchMode.SUBSELECT)
@JsonSerialize(using = CustomLecturerListSerializer.class)
private List<Lecturer> lecturers;
...
}
講師庫
public interface LecturerRepository extends PagingAndSortingRepository<Lecturer, Long> {
...
Page<Lecturer> findAllByCourses(Course course, Pageable pageable);
}
被修改
場服務方法
@Override
public Page<Lecturer> getLecturers(Course course, int page) {
return lecturers.findAllByCourses(course, new PageRequest(page, 10));
}
編輯2
全部課程服務方法
@Override
public Page<LecturerDto> getLecturers(CourseDto course, int page) {
Type listType = new TypeToken<Page<LecturerDto>>() {}.getType();
return modelMapper.map(lecturers.findAllByCourses(modelMapper.map(course, Course.class), new PageRequest(page, 10)), listType);
}
我已經嘗試了一些東西,但我不能使它發揮作用。你知道我爲什麼遇到這個嗎?我想這樣做是因爲我想要一個課程的講師分頁。
謝謝。
你能張貼代碼調用'findAllByCourses'?另外,我強烈建議不要在多對多關係中使用CascadeType.ALL(這意味着'CascadeType.REMOVE') – crizzis
您對CASCADE.ALL是正確的。謝謝。關於該方法的代碼,我不能發佈它,因爲它是由Spring JPA生成的。它使用它們的查詢方法語法並基於該方法構建查詢。我爲CoursesRepository使用了類似的方法。該方法工作得很好,所以我認爲這種關係或一些註釋存在問題。 –
我的意思是使用它的代碼,而不是實現 – crizzis