Создание базы данных запроса Spring boot JPA? - PullRequest
0 голосов
/ 11 октября 2019

Я новичок в весенней загрузке. Мне нужно создать метод findByCode, который в некоторой степени похож на findById (), но вместо длинного идентификатора используется длинный код. (Код не является первичным ключом). Может кто-нибудь, пожалуйста, помогите

отображения расписания базы данных (идентификатор, начало, конец, день, код)

Представление TimeTableMapping

@Entity
@Table(name="timetablemappings")
@EntityListeners(AuditingEntityListener.class)
public class TimeTableMapping {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String day;
    private String start;
    private String end;
    private String subject_code;
    private String time_table_code;
    private Long code;

//Constructor

//Getters and setters

TimeTableMappingDAO

@Service
public class TimeTableMappingDAO {

    @Autowired
    TimeTableRepository timeTableRepository;

    @Autowired
    TimeTableMappingRepository timeTableMappingRepository;


    //to save
    public TimeTableMapping save(TimeTableMapping timeTableMapping){
        return timeTableMappingRepository.save(timeTableMapping);
    }

    //to save all
    public void saveAll(List<TimeTableMapping> timeTableMapping){
        timeTableMappingRepository.saveAll(timeTableMapping);
    }

        //to search all
    public List<TimeTableMapping> findAll(){
        return timeTableMappingRepository.findAll();
    }

    public List<Long> findDistinct(){
      return timeTableMappingRepository.findTimeTableMappingDistinctByCode();
   }

    //get by id
    public TimeTableMapping findById(Long id){
        return timeTableMappingRepository.findById(id).orElse(null);
    }

    public TimeTableMapping findByCode(Long code){
        return timeTableMappingRepository.findByCode(code).orElse(null);
    }


    //delete
    public void delete(Long id){
        timeTableMappingRepository.deleteById(id);
    }


}

контроллер timeTableMapping

@Controller
public class TimeTableMappingController {
    @Autowired
    private  TimeTableMappingDAO timeTableMappingDAO;

    @Autowired
    private TimeTableDAO timeTableDAO;

    @Autowired
    private SubjectDAO subjectDAO;

    @Autowired
    private StudentGroupDAO studentGroupDAO;

    @Autowired
    private DayDAO dayDAO;

    @Autowired
    private TimeDAO timeDAO;



    @RequestMapping("/timeTableMapping")
    public String viewHomePage(Model model){
        System.out.println("hey");
        List<Long> timeTableMappingDetails= timeTableMappingDAO.findDistinct();
       // List<TimeTableMapping>  timeTableMappingDetails=timeTableMappingDAO.select(timeTableMappingDetails1);
        System.out.println("hey");
        System.out.println(timeTableMappingDetails.toString());
        List<TimeTableMapping> tempList=new ArrayList<>();

        for(int i = 0 ; i < timeTableMappingDetails.size(); i++) {
            TimeTableMapping tempTimeTable = new TimeTableMapping();
            tempTimeTable.setCode(timeTableMappingDetails.get(i));
            tempList.add(tempTimeTable);
            System.out.println(timeTableMappingDetails.get(i));

        }
        model.addAttribute("timeTableMappingDetails",tempList);

        return "timeTableMapping";
    }


    @RequestMapping(value="/timeTableMapping/saveAll",method= RequestMethod.POST)
    public String saveTimeTable(@ModelAttribute("timeTableMapping") TimeTableMapping timeTableMapping){

        String[] dayArray = timeTableMapping.getDay().split(",");
        String[] subArray = timeTableMapping.getSubject_code().split(",");
         String[] startArray = timeTableMapping.getStart().split(",");
        String[] endArray = timeTableMapping.getEnd().split(",");

        String[] uniqueDay = Arrays.stream(dayArray).distinct().toArray(String[]::new);
        String[] uniqueStart = Arrays.stream(startArray).distinct().toArray(String[]::new);
        String[] uniqueEnd = Arrays.stream(endArray).distinct().toArray(String[]::new);


        List<TimeTableMapping> tempList = new ArrayList<>();
        int count=0;
        for(int j=0;j<uniqueStart.length;j++) {

            for(int i = 0 ; i < uniqueDay.length; i++) {
                TimeTableMapping tempTimeTable = new TimeTableMapping();
                tempTimeTable.setStart(uniqueStart[j]);
                System.out.println(uniqueStart[j]);

                tempTimeTable.setEnd(uniqueEnd[j]);
                tempTimeTable.setTime_table_code(timeTableMapping.getTime_table_code());
                tempTimeTable.setCode(timeTableMapping.getCode());
                tempTimeTable.setDay(uniqueDay[i]);
                tempTimeTable.setSubject_code(subArray[count]);
                tempList.add(tempTimeTable);
                count++;

            }
        }

        timeTableMappingDAO.saveAll(tempList);
        return  "redirect:/timeTableMapping";
    }


    @RequestMapping("/timeTableMapping/new")
    public String addTimeTableMapping(Model model){
        System.out.println("hey");
        System.out.println("hey");
        TimeTableMapping timeTableMapping =new TimeTableMapping();
        model.addAttribute("timeTableMapping",timeTableMapping);

        List<TimeTable> timeTableDetail = timeTableDAO.findAll();
        model.addAttribute("timeTables", timeTableDetail);

        List<Subject> subjectDetail = subjectDAO.findAll();
        model.addAttribute("subjects", subjectDetail);

        String[] days = new String[] { "Monday", "Tuesday"};

        List<Day> dayDetails = dayDAO.findAll();
        model.addAttribute("days",dayDetails);

        List<Time> timeDetails = timeDAO.findAll();
        model.addAttribute("times",timeDetails);

        return "addTimeTableMapping";
    }


    @RequestMapping("/timeTableMapping/edit/{id}")
    public ModelAndView updateTimeTable(@PathVariable(name="id")Long code){
        ModelAndView mav=new ModelAndView(("updateTimeTableMapping"));

        //mav.addObject("timeTableMapping", new TimeTableMapping());

        TimeTableMapping timeTableMapping = timeTableMappingDAO.findByCode(code);
        //System.out.println(timeTableMapping.getTime_table_code());
       // List<TimeTableMapping> timeTableMapping1= timeTableMappingDAO.select(timeTableMapping.getTime_table_code());
        mav.addObject("timeTableMapping",timeTableMapping);


        List<TimeTable> timeTableDetails = timeTableDAO.findAll();
        mav.addObject("timeTables", timeTableDetails);

        List<Subject> subjectDetails = subjectDAO.findAll();
        mav.addObject("subjects", subjectDetails);

        List<StudentGroup> studentGroupDetails = studentGroupDAO.findAll();
        mav.addObject("studentGroups",studentGroupDetails);

        List<Day> dayDetails = dayDAO.findAll();
        mav.addObject("days",dayDetails);

        List<Time> timeDetails = timeDAO.findAll();
        mav.addObject("times",timeDetails);


        return  mav;
    }

    @RequestMapping("/timeTableMapping/delete/{code}")
    public String deleteProduct(@PathVariable(name="code") Long code){
        timeTableDAO.delete(code);
        return  "redirect:/timeTableMapping";
    }
}

репозиторий timeTableMapping

@Repository
public interface TimeTableMappingRepository extends JpaRepository<TimeTableMapping, Long> {
        //Optional<TimeTableMapping> findById(String id);
        //TimeTableMapping findTimeTableMappingsByTime_table_code(String time_table_code);
        @Query("SELECT DISTINCT t.code  FROM TimeTableMapping t")
        List<Long> findTimeTableMappingDistinctByCode();

        List<TimeTableMapping> findByCode(Long code);

        //public List<TimeTableMapping> findDistinctByCode();
}

enter image description here

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Это должно работать

 List<TimeTableMapping> findByCode(Long code);

Вам не нужно @Query. Вы можете искать по любому полю.
Если вы хотите List<Long>, а не List<TimeTableMapping>, это невозможно. Вы получаете List<TimTableMapping>, а затем извлекаете из него коды.

Или Вы можете написать проекцию только для получения кодов. Даже в этом случае тип возвращаемого значения должен быть List<TimeTableMapping>. Разница в том, что вместо всех полей будет выбрано только поле кода

0 голосов
/ 11 октября 2019

В репозитории добавьте

@Query(" SELECT DISTINCT t.code  FROM TimeTableMapping t where Code=?1 ")
List<Long> findTimeTableMappingDistinctByCode(Long code);

?1 означает первый параметр.

...