0

Я создаю приложение на основе Google App Engine (Java), используя JDO для сохранения.Как создать объекты в одной группе Entity?

Может кто-нибудь дать мне пример или указать мне какой-то код, который показывает наличие нескольких объектов (одного типа) с использованием javax.jdo.PersistenceManager.makePersistentAll() в транзакции.

В основном мне нужно понять, как поместить несколько entites в одну группу Entity, чтобы они могли быть сохранены с помощью makePersistentAll() внутри транзакции.

ответ

0

Спасибо за ответ Nick.

В этом документе сообщается только о неявной обработке групп объектов движком приложения при его родительско-дочернем отношении. Я хочу сохранить несколько объектов одного типа, используя PeristentManager.makePersistentAll (список) в транзакции. Если объекты не совпадают с Entity Group, это исключение. В настоящее время я мог бы сделать это, как показано ниже, но думаю, что должно быть лучше и более адекватный подход, чтобы сделать это -

User u1 = new User("a"); 
UserDAO.getInstance().addObject(user1); 
// UserDAO.addObject uses PersistentManager.makePersistent() in transaction and user 
// object now has its Key set. I want to avoid this step. 

User u2 = new User("x"); 
u2.setKey(KeyFactory.createKey(u1.getKey(),User.class.getSimpleName(), 100 /*some random id*/)); 

User u3 = new User("p"); 
u3.setKey(KeyFactory.createKey(u1.getKey(), User.class.getSimpleName(), 200)); 

UserDAO.getInstance().addObjects(Arrays.asList(new User[]{u2, u3})); 
// UserDAO.addObjects uses PersistentManager.makePersistentAll() in transaction. 

Хотя этот подход работает, то проблема состоит в том, что вы должны зависеть от уже постоянного объекта к создать группу сущностей.

1

я сделал это:

public static final Key root_key = KeyFactory.createKey("Object", "RootKey"); 

...

так типичный хранилищу настойчивый объект будет установить идентификатор в конструкторе вместо того, чтобы один автоматически

public DSO_MyType(string Name, Key parent) 
    { 
     KeyFactory.Builder b = new KeyFactory.Builder(parent);; 
     id = b.addChild(DSO_MyType.class.getSimpleName() , Name).getKey(); 
    } 

и проходите root_key как родительский

Я не уверен, что вы можете передавать разные родители к объектам того же рода

0

Гопи, AFAIK вы не должны делать это ... это должно работать (не проверял):

List<User> userList = new ArrayList<User>(); 
userList.add(new User("a")); 
userList.add(new User("b")); 
userList.add(new User("c")); 
UserDAO().getInstance().addObjects(userList); 

Опять же, AFAIK, это должен поставить все эти объекты в одной и той же группе сущностей. Я хотел бы знать, ошибаюсь ли я.

+0

Внутри транзакции это не работает. То что мой вопрос упоминает. – Gopi

Смежные вопросы