java - 实体关系未正确填充

标签 java spring hibernate

在使用 Hibernate 的 Spring MVC 应用程序中,以多对多关系连接两个实体的列表未正确填充。这些实体是 EncounterProviderEncounter 实体有一个属性 providers,它是 Property 实体的列表,并且未正确填充。有人可以帮助我弄清楚如何修复我的代码以便实体开始正确填充吗?

无法正确填充ArrayList的 Controller 方法代码如下:

@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

Encounter 实体的代码是 at this link .

Provider 实体的代码是 at this link

BaseEntity 的代码是 at this link

Person 实体的代码是 at this link

最佳答案

providerEncounterJunction 表的每次插入都使用相同的主键。我猜它们只是互相覆盖,而该表中实际上只有一行。

关于java - 实体关系未正确填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22002272/

相关文章:

spring - 我们如何在 Spring 调度程序中实现 Multi-Tenancy 选项?

java - hibernate配置xml中的错误: Failed:org. hibernate.MappingException:读取资源时出错:com/

java - gradle 缺少什么来映射 hibernate ?

javascript - IE浏览器日期时间问题

java - 尝试使用 ArrayList 求解用户给定方程的导数

java - spring hibernate实现一对一关系

java - Spring @PropertySource,如何读取不在类路径上,而是在WEB-INF下的文件

hibernate - 在resource.groovy中注册了多个Hibernate事件监听器

java - JUnit测试类顺序

java - Java中Long对象和基本类型long有什么区别?