簡體   English   中英

為什么我在使用 JDO 時不能在我的 LinkedList 中添加超過 1 個 object?

[英]Why can't I add save more than 1 object in my LinkedList while using JDO?

我正在使用谷歌應用引擎和 JDO。 在我的 servlets 之一中,我在鏈表中添加對象並使用持久性管理器保存所有內容。 直到 servlet 結束,它表明一切正常。 它附加鏈表確定。 但是當我嘗試使用 jsp 頁面從數據存儲中獲取該鏈表時,我發現只有一個 object 被添加到該鏈表中。 我在鏈表中添加的對象的 Rest 未保存在數據存儲中。 為什么會這樣?
提前致謝。 這是代碼:

 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 中,將 object 添加到列表不會從 object 復制到列表中。 該列表僅存儲對您的 object 的引用。 因此,在每次迭代中,您都會覆蓋在上一次迭代中存儲在 object 中的內容,並在列表中添加對相同 object 的新引用。 最后,該列表包含 N 個對完全相同的 object 的引用。

因此,當數據存儲在數據庫中存儲該列表時,它會注意到該列表包含相同的 object 重復 n 次,並且只存儲了一次 object。

因此,您必須在每次迭代時創建一個新位置 object:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM