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;
}
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
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