#java #spring-boot #spring-mvc #spring-data-jpa #h2
#java #spring-boot #spring-mvc #spring-data-jpa #h2
Вопрос:
В настоящее время я создаю приложение, которое позволяет создавать учащихся, а затем помечать их как отсутствующих. Я хочу иметь возможность сделать это, добавив его в отдельную таблицу под названием AbsentStudents. Но с jparepository или crudreposotroy не предоставляют мне этих опций.
Я попытался создать новую сущность, которая была бы точной копией сущности students, затем сделать dao равным findbyid student. это выглядело так:
dao.equals(repo.findById(id));
Index.jsp:
<body>
<p> Add a student into the database:<p>
<form action ="addStudent">
<input type = "text" name = "ID"><br>
<input type = "text" name = "Name"><br>
<input type = "text" name = "Teacher"><br>
<input type = "submit">
</form>
<p> Mark a Student Absent<p>
<form action ="markAbsent">
<input type = "text" name = "ID"><br>
<input type = "submit">
</form>
</body>
</html>
Затем absentStudent, который совпадает с student
@Entity
@Getter
@Setter
public class AbsentStudent
{
@Id
private int id;
public int getId() {
return id;
}
}
Затем я создал dao как для student, так и для absent.
Наконец, вот контроллер. Я оставил автоматическое подключение отключенным.
@RequestMapping("/addStudent")
public String addStudent(Student student) {
repo.save(student);
return "index.jsp";
}
@RequestMapping("/markAbsent")
public ModelAndView markAbsent(@RequestParam int id) {
ModelAndView mv = new ModelAndView();
dao.equals(repo.findById(id));
mv.setViewName("absent.jsp");
mv.addObject(dao);
return mv;
}
}
Я ожидал, что в конце появится страница, которая извлечет всех отсутствующих студентов из базы данных и разместит их на одной странице. Но я получаю страницу с ошибкой.
данные не копировались от ученика к отсутствующему ученику.
Комментарии:
1. Могу ли я получить некоторую помощь?
2. Можете ли вы показать, где вы объявляете
dao
и предоставить код для этого класса?3. общедоступный интерфейс AbsentDao расширяет CrudRepository<AbsentStudent, целое число> { }
4. Я объявляю это вверху с помощью @autowired.
5. @autowired AbsentDao dao. (В контроллере)
Ответ №1:
Я хочу иметь возможность сделать это, добавив их в отдельную таблицу под названием AbsentStudents. Но с jparepository или crudreposotroy не предоставляют мне этих опций.
Возможно, аннотация @Query внутри интерфейса dao (репозитория) поможет решить вашу проблему (https://www.baeldung.com/spring-data-jpa-query )
Комментарии:
1. Спасибо, но какой запрос я должен использовать для копирования из student в AbsentStudent и куда я должен его поместить?
2. На мой взгляд, будет лучше, если вы просто добавите новое поле в класс сущностей Student (например, логическое значение отсутствует, ЧИСЛО (1,0) в базе данных), и когда вы отметите какого-нибудь студента, вы просто обновите свою таблицу students с помощью
@Modifying @Query(value = "update student set absent = 1 where id = :id", nativeQuery = true) public void markAbsentStudent(@Param("id") Integer studentId);
, и в тот момент, когда вам нужно будет получить всех отсутствующих студентов, вы вызовете другой запрос@Query(value = "select * from student where absent = 1", nativeQuery = true) public List<Student> getAbsentStudents();
3. В аннотации @Modifying говорится, что этот запрос изменит некоторую таблицу в базе данных. Код, который я пишу выше, должен находиться внутри интерфейса, который реализует jparepository или crudrepository (репозиторий для студентов)
4. Атрибут NativeQuery указывает, что код внутри атрибута value написан на sql (по умолчанию это jpql).
5. Nvm. Понял. Спасибо!