Tôi đang sử dụng Google AppEngine, với Java. Khi tôi sử dụng một số tính năng kho dữ liệu, tôi nhận được thông báo lỗi:Kho dữ liệu AppEngine: "Đối tượng có id ... được quản lý bởi một Trình quản lý đối tượng khác"
Object with id "[email protected]" is managed by a different Object Manager
Tôi không biết điều này có nghĩa là gì hoặc cách khắc phục hoặc tìm tài liệu về lỗi này ở đâu. Ai giúp tôi với? Mã tôi đang sử dụng là:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class School {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private String shortname;
@Persistent
private String fullname;
@Persistent
@Order(extensions = @Extension(vendorName="datanucleus", key="list-ordering", value="code asc"))
private List<Teacher> Teachers;
...
public Teacher FindOrCreateTeacher(String code)
{
// Can we find the teacher without any database code?
Teacher newTeacher = FindTeacher(code);
if (newTeacher != null)
return newTeacher;
// Create the teacher:
PersistenceManager pm = PMF.get().getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
for (Teacher teacher : Teachers) {
if (teacher.getCode() == code) {
tx.rollback();
return teacher;
}
}
newTeacher = new Teacher(code);
Teachers.add(newTeacher);
pm.makePersistent(newTeacher);
pm.makePersistent(Teachers);
tx.commit();
} finally {
tx.commit();
}
return newTeacher;
}
Tôi tin rằng "private List<Teacher> Teachers;
" đề cập đến mối quan hệ "sở hữu, một đến nhiều".
Giải thích thú vị. +1 – VonC
Bạn có thể giải thích thêm cho tôi về tuổi thọ phù hợp cho một cá thể PM không? Giả sử tôi đang viết một ứng dụng web. Tôi có nên mở và đóng nó trên mọi yêu cầu trang không? Hoặc giữ một ví dụ mở cho toàn bộ thời gian của quá trình? (Nếu tôi cam kết một giao dịch nhưng không đóng PM, điều này có nghĩa là điều tồi tệ nhất xảy ra là rò rỉ bộ nhớ? Ý tôi là, dữ liệu của tôi an toàn?) –
Quá trình này diễn ra trong bao lâu? Một hệ thống web điển hình sẽ sử dụng một PM cho mỗi yêu cầu. Tạo một PM không đắt (tạo ra một PMF * là * đắt tiền). Nếu sử dụng txns thì bạn có thể để PM mở một cách an toàn ... miễn là bạn không thực hiện cập nhật phi giao dịch cũng với PM đó. – DataNucleus