【发布时间】:2014-02-25 00:38:28
【问题描述】:
在使用 Hibernate 的 Spring MVC 应用程序中,无法正确填充以多对多关系连接两个实体的列表。实体是Encounter 和Provider。 Encounter 实体有一个属性providers,它是Property 实体的列表,并且没有正确填充。有人可以帮我弄清楚如何修复我的代码,以便实体开始正确填充吗?
无法正确填充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 大于0。尽管Encounters 中的每一个都在基础数据表中指定了Provider,但这是正确的。
注意:为简化此发布,我已将相关代码上传到文件共享站点。您可以通过单击下面的链接在文件共享站点查看代码。
您可以阅读在基础数据库at this link 中为encounters 和providers 创建和填充数据表的代码。
Encounter 实体的代码是at this link。
Provider 实体的代码是at this link。
BaseEntity 的代码是 at this link。
Person 实体的代码是at this link。
【问题讨论】: