Я довольно растерялся, отображая следующую структуру с аннотациями JPA.
+===========+ +====================+
| Offer | | Text |
+-----------+ 1 0..* +--------------------+
| id (pk) |-------------| textkey (pk) |
| namekey | | languagecode (pk) |
| ... | | text |
+===========+ | ... |
+====================+
Итак, у каждого предложения есть имя, которое известно i18n. Поскольку в приложении снова и снова возникают одни и те же случаи (предложение также имеет комментарий i18n, статья имеет имя i18n и т. Д.), Я хочу иметь текстовый объект с составным первичным ключом. Для каждого ключа столько записей, сколько поддерживаемых языков. Образцы текста:
+=====================================+
| textkey | languagecode | text |
+=====================================+
| offer5Name | en | foo |
| offer5Name | fr | bar |
| offer6Name | en | hello |
...
Сущность «Предложение» будет хранить текстовый текстовый ключ в своем столбце именных ключей.
Что касается Java, я бы хотел, чтобы в предложении был набор имен или, что еще лучше, карта имен, чтобы у меня был метод типа Text getName(String language)
вместо Set<Text> getNames()
.
У меня уже есть текст и его составной первичный ключ TextPK:
@Entity
public class Text {
@EmbeddedId
private TextPK primaryKey;
@Column(name = "text")
private String text;
PK
@Embeddable
public class TextPK implements Serializable {
@Column(name = "textkey")
private Long key;
@Column(name = "languagecode")
@Enumerated(EnumType.STRING)
private LanguageCode languageCode;
Вопрос: как аннотировать переменную-член 'names' в классе Offer, чтобы получить то, что мне нужно?