Appengine JDO, как я могу получить дочерний объект, зная дочернее свойство и родительский ключ?

Используя менеджер постоянства, как я могу получить дочерний объект, зная дочернее свойство и родительский ключ?

Родитель определяется следующим образом:

public class User {

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key id;

@Persistent(mappedBy = "user")
@Element(dependent = "true")
private List<Section> sections;
...

И ребенок определяется так:

public class Section {

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;

@Persistent
private User user;

@Persistent
private String title;
...

Зная идентификатор «Пользователь» и заголовок «Раздел», как я могу получить раздел? Я пытался создать запрос для извлечения раздела, используя что-то вроде этого: «где заголовок == xxx И user.id ¿? == xxx', но я не уверен, как указать идентификатор пользователя. Есть ли способ сделать это с помощью запросов или методов из менеджера постоянства?

Спасибо.


person pablobart    schedule 07.08.2011    source источник


Ответы (2)


Я, наконец, сделал это с помощью этого метода:

public static Section getSectionByTitle(String title, Key user_key){
    PersistenceManager pm = PMF.get().getPersistenceManager();  
    Query query = pm.newQuery("select from "+Section.class.getName()+" WHERE title == s && user == keyParam");
    query.declareParameters("String s, String k");
    query.setUnique(true);
    Section section = (Section) query.execute(title, user_key.getId());
    return section;
}
person pablobart    schedule 07.08.2011

Вы можете вызвать этот метод для объекта запроса:

q.setAncestor(КлючПредка);

Прочтите эту страницу для получения дополнительной информации (запросы предков).

Я помню, что видел что-то вроде синтаксиса 'where ANCESTOR =', но сейчас я не могу найти ссылку на него.

person n0rm1e    schedule 07.08.2011
comment
Спасибо, но метод setAncestor работает для низкоуровневого API хранилища данных, я пытался использовать запрос JDO. - person pablobart; 07.08.2011