Jpa自定义查询可将数据从一个表复制到另一个表

时间:2020-10-17 00:30:41

标签: spring

我是Jpa的新手。我想将数据从一个表复制到另一个表(到course_confirm的课程)。但是,我从浏览器和控制台都得到了响应:没有可用的消息java.lang.NullPointerException。我希望有人能帮助我。以下是一些代码:

  1. 存储库:

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

    }

  2. 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 
    
  3. 服务层:

    公共课程Ch saveCourseConfirm(){ 设置allDataList = moveCourseRepository.moveCourseConfirm(); CourseCh courseCh =新的CourseCh(); for(CourseCh courseChObj:allDataList){ moveCourseRepository.save(courseChObj); courseCh = courseChObj; } 返回课程 }

  4. 保存在控制器中的方法

    @PostMapping(“ / approveCurriculum”) 公共字符串createCourseCh(){

         courseChService.saveCourseConfirm();
         return "redirect:/";
     }
    

select语句成功执行,但jpa无法将从课程中获取的数据保存到course_confirm表中。

2 个答案:

答案 0 :(得分:1)

基本上,可以使用自定义查询以最简单的方式解决此问题,而不是使用set来检索所有值。只需使用下面给出的查询,并传递具有最后插入的ID的ID值,这样就不会一次又一次使用重复的值。

insert into course_confirm select * from course where id > 1

答案 1 :(得分:0)

以下是我对上述代码进行的更新:

  1. 存储库层:

    @存储库 公共接口MoveCourseRepository扩展了CrudRepository {

     @Query(nativeQuery = true, value = "INSERT into course_confirm SELECT * FROM courses WHERE id > 1")
     List<CourseCh> moveCourseConfirm(long id);
    

    }

  2. 服务层:

    @Override 公开清单saveCourseConfirm(long id){ 返回moveCourseRepository.moveCourseConfirm(id); }

  3. 控制器层:

    @PostMapping(“ / approveCurriculum / {id}”) public String createCourseCh(@PathVariable long id,模型模型){ model.addAttribute(“ course”,courseChService.saveCourseConfirm(id)); 返回“重定向:/课程”; }

仍然,我得到服务器响应:无法将类型'java.lang.String'的值转换为所需的类型'long';嵌套的异常为java.lang.NumberFormatException:对于输入字符串:“ {id}”

我将不胜感激。

相关问题