为什么在使用 JDO 时,我不能在链接列表中添加保存超过 1 个对象?



我使用的是谷歌应用引擎和JDO。在我的一个servlet中,我在链表中添加对象,并使用持久性管理器保存所有内容。直到servlet结束,它显示一切正常工作。它附加了链表。但是当我尝试通过使用jsp页面从数据存储中获取该链接列表时,我发现只有一个对象被添加到该链接列表中。我在linkedlist中添加的其他对象没有保存在数据存储中。为什么会发生这种情况?
提前感谢。下面是代码:

 public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws IOException {
  resp.setContentType("text/html");
  PersistenceManager pm = PMF.get().getPersistenceManager();
  try
  {
//.... 
    for(int j=0; j<coordinate.length; j++){
        if(j < locations.size()){
                locations.get(j).getCoordinate().setLatitude(coordinate[j].x);
                locations.get(j).getCoordinate().setLongitude(coordinate[j].y);                         
        }else{
                        loc.setLatitude(coordinate[j].x);
                        loc.setLongitude(coordinate[j].y);
                        locat.setCoordinate(loc);
                        locations.add(locat);
        }
                   System.out.println(locations.size());
    }
    }catch(Exception ex){
        System.out.println("Error fetching runs: " + ex);
    }final{
        pm.close();
    }
 }

您的代码不完整,因此很难确定,但我怀疑您基本上是这样做的:

Location locat = new Location();
List<Location> locations = ...;
for (int j = 0; j < coordinate.length; j++) {
    // ...
    locat.setCoordinate(loc);
    locations.add(locat);
}

在Java中,向列表中添加对象并不会将对象复制到列表中。该列表只是存储对对象的引用。因此,在每次迭代中,您都会覆盖在前一次迭代中存储在对象中的内容,并向列表中添加对同一对象的新引用。最后,该列表包含对完全相同对象的N个引用。

所以当数据存储在数据库中存储列表时,它注意到列表中包含重复n次的相同对象,并且只存储了一次对象。

因此,您必须在每次迭代中创建一个新的location对象:

List<Location> locations = ...;
for (int j = 0; j < coordinate.length; j++) {
    // ...
    Location locat = new Location();
    locat.setCoordinate(loc);
    locations.add(locat);
}

相关内容

  • 没有找到相关文章

最新更新