2012-03-16 2 views
2

Есть ли простой способ сделать следующее, используя Play! рамки и спящий режим?Сводные классы подкласса и подкласса в Java

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

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

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

Что было бы лучшим способом подойти к этой проблеме?

ответ

2

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

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

+0

Это есть простой способ изменить модель спящего режима, чтобы принять это, как приложение находится в производстве, и я также ищу решение, которое могут быть реализованы простым способом без необходимости «конвертировать» всю базу данных. –

0

Я бы использовал данные, специфичные для языка, в отдельной таблице, если это не так просто.

У вас могут быть модели 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)

Смежные вопросы