Реализация тегов в JDO - PullRequest
3 голосов
/ 20 мая 2010

Я внедряю систему тегов для сайта, который использует JDO. Я хотел бы использовать этот метод.

Однако я новичок в отношениях в JDO. Проще говоря, что у меня выглядит так:

@PersistentCapable
class Post {
@Persistent String title;
@Persistent String body;
}

@PersistentCapable
class Tag {
@Persistent String name;
}

Какие отношения JDO мне нужны и как их реализовать? Я хочу иметь возможность перечислить все Tag, которые принадлежат Post, а также иметь возможность перечислить все Post с заданным Tag Итак, в конце я хотел бы иметь что-то вроде этого:

Table: Post
Columns: PostID, Title, Body

Table: Tag
Columns: TagID, name

Table: PostTag
Columns: PostID, TagID

Ответы [ 2 ]

3 голосов
/ 20 мая 2010

Вы должны посмотреть на: 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 (я полагаю, это из-за того, что хранилище данных работает по-другому, по сравнению с традиционными базами данных). Они могут добавить поддержку отсутствующих функций в будущем.

0 голосов
/ 20 мая 2010

Вы хотите отношение «многие ко многим» , которое поддерживает JDO. Однако App Engine не полностью поддерживает JDO, поэтому я не знаю, возможно ли это.

...