2009-04-17 48 views
6

Tôi đang thử nghiệm với Google App Engine và JDO tùy chọn tồn tại. Tôi muốn biết liệu có thể ánh xạ một đối tượng thoáng qua đến một đối tượng tồn tại không? Hoặc một cái gì đó để cập nhật các đối tượng liên tục với việc sử dụng một đối tượng thoáng qua?JDO - Cập nhật đối tượng

tôi các ví dụ mã hóa tôi thấy các đoạn mã sau đây để cập nhật các đối tượng:

public void updateEmployeeTitle(User user, String newTitle) { 
PersistenceManager pm = PMF.get().getPersistenceManager(); 
try { 
    Employee e = pm.getObjectById(Employee.class, user.getEmail()); 
    if (titleChangeIsAuthorized(e, newTitle) { 
     e.setTitle(newTitle); 
    } else { 
     throw new UnauthorizedTitleChangeException(e, newTitle); 
    } 
} finally { 
    pm.close(); 
} 
} 

Nhưng đây không phải là những gì tôi muốn, không ai biết nếu tôi có thể cập nhật toàn bộ đối tượng như JPA thực hiện: đối tượng. update();

Vì vậy, tôi muốn một cái gì đó như thế này:

public User update(User u) { 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    User usr; 
    try { 
     usr = pm.getObjectById(User.class, u.getId()); 
     // copy transient object u to persist object usr. 
        // on update of usr all changes in object u are persistent. 

    } finally { 
     pm.close(); 
    } 

    return u; 
} 

Trả lời

2

Một đối tượng "thoáng" không có "bản sắc" vì vậy không có cách nào để định vị nó trong một kho dữ liệu. Hãy suy nghĩ cẩn thận nếu bạn muốn sử dụng các đối tượng thoáng qua, hoặc liệu tốt hơn là chỉ nên sử dụng các đối tượng tách rời. JPA sử dụng tương đương với một đối tượng "tách rời". JDO cũng có thể làm điều đó và sau đó bạn chỉ cần gọi pm.makePersistent (detachedObj);

--Andy (DataNucleus)

+0

makePersistent không hoạt động nếu các đối tượng đã có các thiết lập ID (ví dụ khi trước đây đọc từ kho dữ liệu, hoặc khi dân cư từ một mẫu web). – pjesi

+1

Nếu đối tượng được đọc từ kho dữ liệu và nằm trong cùng một giao dịch thì không có điểm gọi hàm makePersistent, bất kỳ thay đổi nào sẽ được tự động đưa vào kho dữ liệu. Nếu đối tượng được đọc từ kho dữ liệu và sau đó tách ra và bạn thay đổi một cái gì đó sau đó gọi makePersistent chắc chắn không "làm việc" vì nó gắn các thay đổi. Nếu bạn có vấn đề cụ thể thì tôi khuyên bạn nên báo cáo cho nhóm appengine của Google – DataNucleus

Các vấn đề liên quan