#spring
#spring
Вопрос:
Я новичок в 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 и courses имеют одинаковые поля:
@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
-
Уровень обслуживания:
общедоступный CourseCh saveCourseConfirm() { Set allDataList = moveCourseRepository.moveCourseConfirm(); CourseCh courseCh = new CourseCh(); для (CourseCh courseChObj : allDataList) { moveCourseRepository.save(courseChObj); courseCh = courseChObj; } возвращает courseCh; }
-
Способ сохранения в контроллере
@PostMapping(«/approveCurriculum») общедоступная строка createCourseCh() {
courseChService.saveCourseConfirm(); return "redirect:/"; }
Оператор select выполнен успешно, но jpa не удалось сохранить извлеченные данные из course в таблицу course_confirm.
Ответ №1:
Вместо использования set для извлечения всех значений вы можете использовать пользовательский запрос, чтобы решить эту проблему самым простым способом. Просто используйте приведенный ниже запрос и передайте значение id, которое имеет последний вставленный идентификатор, чтобы повторяющиеся значения не использовались снова и снова для вставки.
insert into course_confirm select * from course where id > 1
Комментарии:
1. Спасибо, Мутукумаран, за ваш ответ на мой вопрос. Тем не менее, я хотел бы сообщить вам, что я попробовал ваше предложение, но получил ответ от сервера: «Не удалось преобразовать значение типа ‘java.lang. Строка ‘ в требуемый тип ‘длинная’; вложенным исключением является java.lang.NumberFormatException: для входной строки: «{id}»». Я снова опубликую обновление, которое я внес в приведенный ниже код:
Ответ №2:
Ниже приведено обновление, которое я произвел в вышеупомянутом коде:
-
Уровень хранилища:
@Общедоступный интерфейс репозитория MoveCourseRepository расширяет CrudRepository<Курс, длинный>{
@Query(nativeQuery = true, value = "INSERT into course_confirm SELECT * FROM courses WHERE id > 1") List<CourseCh> moveCourseConfirm(long id);
}
-
Уровень обслуживания:
@Переопределить общедоступный список saveCourseConfirm(длинный идентификатор) { вернуть moveCourseRepository.moveCourseConfirm(идентификатор); }
-
Уровень контроллера:
@PostMapping(«/approveCurriculum/{id}») общедоступная строка createCourseCh(@PathVariable длинный идентификатор, модель модели) { model.AddAttribute(«курс», courseChService.saveCourseConfirm(id)); возвращает «перенаправление:/course»; }
Тем не менее, я получаю ответ сервера: не удалось преобразовать значение типа ‘java.lang.Строка ‘ в требуемый тип ‘long’; вложенным исключением является java.lang.NumberFormatException: для входной строки: «{id}»
Я буду признателен за любой вклад, внесенный в меня.