我有一个库调用对象的属性,它是一个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