복붙노트

[SPRING] 엔티티 관계가 제대로 채워지지 않습니다.

SPRING

엔티티 관계가 제대로 채워지지 않습니다.

Hibernate를 사용하는 Spring MVC 애플리케이션에서 ManyToMany 관계에있는 두 엔티티를 조인하는 목록은 제대로 채워지지 않는다. 엔터티는 Encounter 및 Provider입니다. Encounter 엔터티에는 속성 엔터티 목록이 있고 제대로 채워지지 않는 속성 공급자가 있습니다. 엔티티가 올바르게 채워 지도록 내 코드를 수정하는 방법을 찾는 사람을 도와 줄 수 있습니까?

ArrayList를 제대로 채우지 못하는 컨트롤러 메서드의 코드는 다음과 같습니다.

@RequestMapping("/calendar")
public String showCalendar(@RequestParam("day") String day, org.springframework.web.context.request.WebRequest webRequest, Model model) {
    String pid = webRequest.getParameter("pid");
    System.out.println("............ pid is:  " + pid);

    model.addAttribute("pid", pid);
    LocalDate mydate;

    if(day.equals("")) {
      mydate = new LocalDate();
    } else {
      mydate = new LocalDate(day);
    }

    System.out.println("------------------------ in controller, day of month is:  " + mydate.getDayOfMonth());
    AppointmentCalendar calendar = new AppointmentCalendar(mydate); // Or whatever you do to create it
    List<Encounter> encountersforday = (List<Encounter>) clinicService.getEncountersForDay(mydate);

    model.addAttribute("calendar", calendar);
    model.addAttribute("encountersforday", encountersforday);

    System.out.println("number of encountersforday is: " + encountersforday.size());

    List<LocalTime> myblocks = calendar.getBlocks();
    int[][] filledblocks = new int[myblocks.size()][3];
    for (Integer i=0; i < encountersforday.size(); i++) {
        System.out.println("i, encounterid, patientid, first, last, " +
                           "numProviders, dateTime are: " + i + ", " +
                           encountersforday.get(i).getId() + ", " +
                           encountersforday.get(i).getPatient().getId() + ", " +
                           encountersforday.get(i).getPatient().getFirstName() + ", " +
                           encountersforday.get(i).getPatient().getLastName() + ", " +
                           encountersforday.get(i).getProviders().size() + ", " +
                           encountersforday.get(i).getDateTime());
        for (Integer g=0; g < myblocks.size(); g++) {
            filledblocks[g][0] = g;//blockid
            if (myblocks.get(g).getHourOfDay() == encountersforday.get(i).getDateTime().getHourOfDay()) {
                if (myblocks.get(g).getMinuteOfHour() == encountersforday.get(i).getDateTime().getMinuteOfHour()) {
                    int hours = myblocks.get(g).getHourOfDay();
                    int mins = myblocks.get(g).getMinuteOfHour();
                    System.out.println("found match at: "+hours+":"+mins);
                    filledblocks[g][1] = i+1;//encounterid
                    filledblocks[g][2] = 1;//segmentindex
                }
            }
        }
    }

    return "appointments/calendar";
}

앞의 코드에서 System.out.println () 명령은 다음을 출력합니다.

number of encountersforday is: 5
i, encounterid, patientid, first, last, numProviders, dateTime are: 0, 1, 5, Peter, McTavish, 0, 2014-01-10T12:00:00.000-08:00
found match at: 12:0
i, encounterid, patientid, first, last, numProviders, dateTime are: 1, 2, 4, Harold, Davis, 0, 2014-01-10T11:30:00.000-08:00
found match at: 11:30
i, encounterid, patientid, first, last, numProviders, dateTime are: 2, 3, 3, Eduardo, Rodriquez, 0, 2014-01-10T10:00:00.000-08:00
found match at: 10:0
i, encounterid, patientid, first, last, numProviders, dateTime are: 3, 4, 2, Morticia, Adams, 0, 2014-01-10T09:30:00.000-08:00
found match at: 9:30
i, encounterid, patientid, first, last, numProviders, dateTime are: 4, 5, 1, Speed, Racer, 1, 2014-01-10T13:30:00.000-08:00
found match at: 13:30  

위 출력에서 ​​볼 수 있듯이 Encounter 객체 중 하나만 numProviders보다 큽니다. Encounters 모두 하나 하나가 기본 데이터 테이블에 지정된 Provider를 가지고 있음에도 불구하고 사실입니다.

참고 :이 게시를 단순화하기 위해 관련 코드를 파일 공유 사이트에 업로드했습니다. 아래 링크를 클릭하면 파일 공유 사이트에서 코드를 볼 수 있습니다.

이 링크의 기본 데이터베이스에있는 조우 자 및 제공자에 대한 데이터 테이블을 만들고 채우는 코드를 읽을 수 있습니다.

Encounter 엔터티의 코드는이 링크에 있습니다.

Provider 엔터티의 코드는이 링크에 있습니다.

BaseEntity의 코드는이 링크에 있습니다.

Person 엔티티의 코드는이 링크에 있습니다.

해결법

  1. ==============================

    1.providerEncounterJunction 테이블에 삽입 할 때마다 동일한 기본 키가 사용됩니다. 나는 그들이 단순히 서로 겹쳐 쓰는 것, 그리고 당신은 정말로 그 테이블에 한 줄을 가지고 있다고 생각할 것이다.

    providerEncounterJunction 테이블에 삽입 할 때마다 동일한 기본 키가 사용됩니다. 나는 그들이 단순히 서로 겹쳐 쓰는 것, 그리고 당신은 정말로 그 테이블에 한 줄을 가지고 있다고 생각할 것이다.

  2. from https://stackoverflow.com/questions/22002272/entity-relationship-not-populating-properly by cc-by-sa and MIT license