Вы должны посмотреть на: http://code.google.com/appengine/docs/java/datastore/relationships.html#Unowned_Relationships
По сути, вы создаете Class PostTag, который запускается из его первичного ключа и имеет два поля Key для каждого из отношений:
@PersistentCapable
class PostTag {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
/*you should add this to Post and Tag as well,
since this is what the fields in PostTag will reference
you can rename them to ClassnameID if you like, I believe*/
@Persistent
private Key post;
@Persistent
private Key tag;
}
Затем, когда вы создаете PostTag, вы должны сделать что-то вроде этого
PostTag pt = new PostTag();
pt.setPost(post.getKey());
pt.setTag(tag.getKey());
// persist pt here;
Я использовал здесь методы получения / установки, поскольку вы обычно устанавливаете поля как приватные и получаете к ним доступ через методы доступа, но это ваш вызов; также 'post' и 'tag' в приведенном выше фрагменте должны быть уже сохраненными объектами, которые вы хотите связать.
Редактировать: вероятно, вам также следует взглянуть на: http://code.google.com/appengine/docs/java/datastore/usingjdo.html#Unsupported_Features_of_JDO, поскольку механизм приложений только частично реализует JDO (я полагаю, это из-за того, что хранилище данных работает по-другому, по сравнению с традиционными базами данных). Они могут добавить поддержку отсутствующих функций в будущем.