Как запрашивать постоянные объекты JDO в модели отношений без владельца?

Я пытаюсь перенести свое приложение с PHP и RDBMS (MySQL) на Google App Engine, и мне трудно понять модель данных и отношения в JDO. В моем текущем приложении я использую много запросов JOIN, таких как:

SELECT users.name, comments.comment
FROM users, comments
WHERE users.user_id = comments.user_id
AND users.email = '[email protected]'

Насколько я понимаю, запросы JOIN не поддерживаются таким образом, поэтому единственный (?) способ хранения данных - это использование бесхозных отношений и «внешних» ключей. Есть документация по этому поводу, но нет полезных примеров. Пока у меня что-то вроде этого:

@PersistenceCapable
public class Users {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    private String name;
    
    @Persistent
    private String email;
    
    @Persistent
    private Set<Key> commentKeys;

    // Accessors...
}

@PersistenceCapable
public class Comments {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    private String comment;
    
    @Persistent
    private Date commentDate;

    @Persistent
    private Key userKey;

    // Accessors...
}

Итак, как мне получить список с именем комментатора, комментарием и датой в одном запросе? Я вижу, как я, вероятно, мог бы уйти с 3 запросами, но это кажется неправильным и создаст ненужные накладные расходы. Пожалуйста, помогите мне с некоторыми примерами кода.

-- Павел.


person Paul B    schedule 14.06.2010    source источник
comment
Кроме того, выполнение соединения создаст накладные расходы. Я бы предпочел поставить Set<Comments> вместо Set<Key> на объект Users. Я предлагаю также использовать единственное число в именах классов.   -  person hleinone    schedule 14.06.2010


Ответы (1)


Можно комментировать только то, что является действительным JDOQL для этого

ВЫБЕРИТЕ this.name, commentVar.comment FROM mydomain.Users WHERE this.key == commentVar.userKey && this.email = '[email protected]' ПЕРЕМЕННЫЕ mydomain.Comments commentVar

ответит ли GAE/J на его реализацию.

person DataNucleus    schedule 14.06.2010