Интернационализация на уровне БД в рамках Play - PullRequest
4 голосов
/ 25 октября 2011

Есть ли чистое решение для многоязычных полей в JPA?

Я думаю об этой структуре БД:

столовый продукт

+---------+--------------+-----+ 
| Field   | Type         | Key | 
+---------+--------------+-----+ 
| id      | bigint(20)   | PRI | 
| price   | varchar(255) |     | 
+---------+--------------+-----+ 

таблица product_lang

+------------------+--------------+-----+ 
| Field            | Type         | Key | 
+------------------+--------------+-----+ 
| id               | bigint(20)   | PRI | 
| lang             | varchar(3)   | PRI | 
| title            | varchar(255) |     | 
| description      | varchar(255) |     | 
+------------------+--------------+-----+ 

И этот класс я бы хотел использовать:

@Entity
public class Product {

  @Id
  public Long id;

  public Double price;

  public Locale lang;

  @Translateable
  public String title;

  @Translateable
  public String description;
}

Ответы [ 2 ]

0 голосов
/ 27 октября 2011

Я не совсем уверен, что вы можете сопоставить одну сущность двум таблицам так, как вы предлагаете. Подобно тому, что вы хотите, вы можете хранить переводы как:

@CollectionOfElements
Map<String, String> titles;

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

0 голосов
/ 26 октября 2011

ИМО, неправильное решение.Если вы действительно хотите иметь интернационализацию БД, я бы лучше создал несколько баз данных, а не одну большую, содержащую все данные.

Просто проверьте язык, чтобы получить правильное соединение с БД.

...