Je suis assez perdu avec le mappage de la structure suivante avec les annotations JPA.Perdu avec JPA @OneToMany et composite PK
+===========+ +====================+
| Offer | | Text |
+-----------+ 1 0..* +--------------------+
| id (pk) |-------------| textkey (pk) |
| namekey | | languagecode (pk) |
| ... | | text |
+===========+ | ... |
+====================+
Ainsi, chaque offre a un nom qui est i18n-aware. Comme j'ai les mêmes cas encore et encore dans l'application (offre a aussi un commentaire i18n, article a un nom i18n, etc.) Je veux avoir une entité de texte avec une clé primaire composite. Pour chaque clé, il existe autant d'enregistrements que de langues prises en charge. échantillons de texte:
+=====================================+
| textkey | languagecode | text |
+=====================================+
| offer5Name | en | foo |
| offer5Name | fr | bar |
| offer6Name | en | hello |
...
L'entité offre stockerait texte # textkey dans sa colonne namekey.
Du côté de Java j'aimerais offrir à un ensemble de noms ou même mieux une carte de noms ainsi je pourrais avoir une méthode comme Text getName(String language)
au lieu de Set<Text> getNames()
.
Ce que j'ai déjà est Texte et son TextPK clé primaire composite:
@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;
Question: comment puis-je annote la variable membre 'noms' dans la classe d'offre pour obtenir Ce dont j'ai besoin?