Спящий режим и подклассы классов данных в Java - PullRequest
2 голосов
/ 16 марта 2012

Есть ли простой способ сделать следующее, используя Play!framework и hibernate?

У меня есть класс Article со стандартными данными, такими как pubDate, author и т. д. и т. д. В классе есть два поля, title и content, которые, однако, должны быть предоставлены на разных языках.Все остальные данные, включая идентификатор, должны быть одинаковыми.

Серверная часть системы будет выбирать в соответствии с настройками клиента, какой заголовок / контент выдавать, либо язык по умолчанию, либо языкпредпочтение, когда доступно.Из-за синхронизации важно, чтобы идентификатор статьи оставался одинаковым для всех связанных языков.

В настоящее время у меня есть содержание и заголовок в классе, и мне интересно, стоит ли мне подклассировать базовый класс, который имеет всеОсновная информация и добавление содержимого / заголовка таким образом, мы оставляем содержимое / заголовок языка по умолчанию в базовом классе и, при желании, добавляем содержимое / заголовок языков additinoal в качестве отдельного класса (и, передав его клиенту, замените его насодержимое в базовом классе, если требуется).

Как лучше всего решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

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

У меня был бы класс Article, включающий заголовок, контент и язык.Первичным ключом теперь будет идентификатор статьи и язык.Когда пользователь запрашивал конкретный заголовок, я запрашивал его, используя идентификатор статьи и либо свои языковые предпочтения, либо значение по умолчанию, если ничего не было указано.

0 голосов
/ 16 марта 2012

Я бы реализовал данные, относящиеся к конкретному языку, в отдельной таблице, если использовать i18n в таких случаях нелегко.

Вы можете иметь модели Article и ArticleDetail.В этой модели у вас есть одна статья и несколько языковых экземпляров этой статьи.

@Entity
public class Article extends Model {

    private Author author;
    private Date pubDate;

    ...

}

@Entity
public class ArticleDetail extends Model {

    @MayToOne
    private Article 
    private String languageCode;
    private String title;
    private String content;
    ...

}

Так что, если вы хотите выбрать контент, просто позвоните ArticeDetail.find("article.id=? and langCode=?", articleId, langCode)

...