我是Jpa的新手。我想将数据从一个表复制到另一个表(到course_confirm的课程)。但是,我从浏览器和控制台都得到了响应:没有可用的消息java.lang.NullPointerException。我希望有人能帮助我。以下是一些代码:
存储库:
public interface MoveCourseRepository extends JpaRepository<CourseCh, Long>{
@Query(nativeQuery = true, value = "SELECT course_code, "
+ "credit_unit, dept_id, joint_prerequisite, pass_mark, first_prerequisite, "
+ "second_preriquisite, semester, session, course_title, course_type, created_at, "
+ "updated_at from courses")
Set<CourseCh> moveCourseConfirm();
}
course_confirm和课程实体类具有相同的字段:
@Entity
@Table(name = "course_confirm")
public class CourseCh extends AuditModel{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotEmpty(message = "course code required")
@Column(name = "course_code")
private String code;
@NotEmpty(message = "Course title required")
@Column(name = "course_title")
private String title;
@NotEmpty(message = "Department required")
@Column(name = "dept_id")
private String deptid;
@NotEmpty(message = "Credit units required")
@Column(name = "credit_unit")
private String creditunit;
@Column(name = "semester")
private String semester;
@Column(name = "course_type")
private String type;
@NotEmpty(message = "Pass mark required")
@Column(name = "pass_mark")
private String passmark;
@NotEmpty(message = "Session required")
@Column(name = "session")
private String session;
@Column(name = "first_prerequisite")
private String prerequisite1;
@Column(name = "second_preriquisite")
private String prerequisite2;
@Column(name = "joint_prerequisite")
private String jointprerequisite;
//No argument, all arguments constructor and toString omitted for bravity
服务层:
公共课程Ch saveCourseConfirm(){ 设置allDataList = moveCourseRepository.moveCourseConfirm(); CourseCh courseCh =新的CourseCh(); for(CourseCh courseChObj:allDataList){ moveCourseRepository.save(courseChObj); courseCh = courseChObj; } 返回课程 }
保存在控制器中的方法
@PostMapping(“ / approveCurriculum”) 公共字符串createCourseCh(){
courseChService.saveCourseConfirm();
return "redirect:/";
}
select语句成功执行,但jpa无法将从课程中获取的数据保存到course_confirm表中。
答案 0 :(得分:1)
基本上,可以使用自定义查询以最简单的方式解决此问题,而不是使用set来检索所有值。只需使用下面给出的查询,并传递具有最后插入的ID的ID值,这样就不会一次又一次使用重复的值。
insert into course_confirm select * from course where id > 1
答案 1 :(得分:0)
以下是我对上述代码进行的更新:
存储库层:
@存储库
公共接口MoveCourseRepository扩展了CrudRepository
@Query(nativeQuery = true, value = "INSERT into course_confirm SELECT * FROM courses WHERE id > 1")
List<CourseCh> moveCourseConfirm(long id);
}
服务层:
@Override 公开清单saveCourseConfirm(long id){ 返回moveCourseRepository.moveCourseConfirm(id); }
控制器层:
@PostMapping(“ / approveCurriculum / {id}”) public String createCourseCh(@PathVariable long id,模型模型){ model.addAttribute(“ course”,courseChService.saveCourseConfirm(id)); 返回“重定向:/课程”; }
仍然,我得到服务器响应:无法将类型'java.lang.String'的值转换为所需的类型'long';嵌套的异常为java.lang.NumberFormatException:对于输入字符串:“ {id}”
我将不胜感激。