EJB方法返回一个不同的HashMap?

时间:2017-07-10 09:05:04

标签: java jpa hashmap

我正在开发一个应用程序,人们插入和管理与参与者的旅行。我正在使用JPA并拥有一个Trip实体,其中包含Participations实体列表。现在,我没有在DB上的Participations表上映射名称,但是有一个Employee实体执行它,而Participation实体包含Employee ID。

我写了一个EJB TripBean实现,它有一个获取Trip作为参数的方法,并返回一个包含Employee ID及其名称对的Map:

public Map<Integer, String> getEmployeeNames(Trip trip) {
    Map<Integer, String> employeeNames = new HashMap<Integer, String>();
    for (Participation participation : trip
            .getParticipations()) {
        Employee employee = jpaBean
                .getEmployeeByID(participation.getEmployeeId());
        employeeNames.put(new Integer(employee.getEmployeeId()
                .intValue()),
                employee.getName());
    }
    return employeeNames;
}

现在,在Manager方法中,我使用此hashmap在Participation中设置瞬态字段String employeeName(这是在另一个类中,而不是在同一个EJB中):

Map<Integer, String> employeeNames = tripBean
            .getEmployeeNames(trip);
for (Participation participation : trip.getParticipations()) {
    String employeeName = employeeNames.get(participation.getEmployeeId());
    participation.setEmployeeName(employeeName);
}

我的问题是,当我从tripBean.getEmployeeNames()获取地图时,它与我在getEmployeeNames方法中看到的不同:它包含较少的条目,并且它们与那些条目不对应我看到方法放在一起。 我确定我搞砸了一些最好的练习,有人可以帮忙吗?

其他信息: - 我在本地计算机上调试错误是唯一记录的用户,因此我认为它不依赖于同时访问相同类的其他用户。 - 我在与员工不同的持久性上下文中定义了Trips和Participations。因此,我无法在它们之间创建JPA关系,或者在参与时在postConstruct方法中设置employeeName字段

由于

1 个答案:

答案 0 :(得分:0)

好的,我发现问题出在哪里:参与中的employeeId类型为BigDecimal而不是Integer,因此get()方法找不到任何内容。这解决了这个问题:

String employeeName = employeeNames.get(participation.getEmployeeId().intValue());

我仍然不知道为什么在调试中我会看到一个与我在EJB方法中放在一起的不同的散列图,但是在这一点上我想它只是调试器以不同的方式呈现数据:/ < / p>