[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.providerEncounterJunction 테이블에 삽입 할 때마다 동일한 기본 키가 사용됩니다. 나는 그들이 단순히 서로 겹쳐 쓰는 것, 그리고 당신은 정말로 그 테이블에 한 줄을 가지고 있다고 생각할 것이다.
providerEncounterJunction 테이블에 삽입 할 때마다 동일한 기본 키가 사용됩니다. 나는 그들이 단순히 서로 겹쳐 쓰는 것, 그리고 당신은 정말로 그 테이블에 한 줄을 가지고 있다고 생각할 것이다.
from https://stackoverflow.com/questions/22002272/entity-relationship-not-populating-properly by cc-by-sa and MIT license