Sto cercando di ottenere un'implementazione JPA di un approccio semplice all'internazionalizzazione. Voglio avere una tabella di stringhe tradotte che posso fare riferimento in più campi in più tabelle. Quindi tutte le occorrenze di testo in tutte le tabelle saranno sostituite da un riferimento alla tabella delle stringhe tradotte. In combinazione con un id della lingua, questo darebbe una riga unica nella tabella delle stringhe tradotte per quel particolare campo. Ad esempio, si consideri uno schema che ha entità del corso e il modulo come segue: -JPA Struttura del database per l'internazionalizzazione
Corso int course_id, nome int, descrizione int
modulo int module_id, nome int
Il corso.nome, course.description e module.name fanno tutti riferimento al campo id della tabella delle stringhe tradotte: -
TranslatedString int id, String Lang, contenuti String
Che tutto sembra abbastanza semplice. Ottengo una tabella per tutte le stringhe che potrebbero essere internazionalizzate e quella tabella viene utilizzata su tutte le altre tabelle.
Come posso fare questo in JPA, utilizzando eclipselink 2.4?
Ho esaminato ElementCollection incorporato, ala questo ... JPA 2.0: Mapping a Map - non è esattamente quello che sto cercando perché sembra che rapporta la tabella di stringhe tradotta al pk del tavolo proprietario. Ciò significa che posso avere solo un campo stringa traducibile per entità (a meno che non aggiungo nuove colonne di join nella tabella delle stringhe traducibili, che sconfigge il punto, è l'opposto di quello che sto cercando di fare). Inoltre, non sono chiaro su come questo funzionerebbe attraverso le entrate, presumibilmente l'id di ogni entità dovrebbe utilizzare una sequenza di database estesa per garantire l'unicità della tabella delle stringhe traducibile.
BTW, ho provato l'esempio come illustrato in questo collegamento e non ha funzionato per me, non appena l'entità ha aggiunto una mappa localizzata di stringhe, persistendo ha causato il bombardamento da parte del client ma nessun errore evidente sul lato server e nulla persisteva nel DB: S
Sono stato in giro per le case su questo circa 9 ore finora, ho guardato questo Internationalization with Hibernate che sembra stia cercando di fare la stessa cosa del link sopra (senza le definizioni della tabella è difficile vedere cosa ha ottenuto). Qualsiasi aiuto sarebbe stato realizzato con gratitudine a questo punto ...
Modificare 1 - re AMS anwser qui sotto, non sono sicuro che risolva veramente il problema. Nel suo esempio lascia la memorizzazione del testo descrittivo in qualche altro processo. L'idea di questo tipo di approccio è che l'oggetto entità prende il testo e le impostazioni internazionali e questo (in qualche modo!) Finisce nella tabella delle stringhe traducibili. Nel primo link che ho dato, il ragazzo sta tentando di farlo utilizzando una mappa incorporata, che ritengo sia l'approccio giusto. La sua strada però ha due problemi: uno non sembra funzionare! e due se funziona, memorizza l'FK nel tavolo incorporato invece del contrario (credo, non riesco a farlo funzionare così non riesco a vedere esattamente come persiste). Sospetto che l'approccio corretto finisca con un riferimento alla mappa al posto di ogni testo che deve essere tradotto (la mappa è locale-> contenuto), ma non riesco a vedere come farlo in un modo che consenta più mappe in un'entità (senza avere più colonne corrispondenti nella tabella delle stringhe traducibili) ...
Questo è fantastico! Funziona bene con JPA2.0 + Hibernate 4.2 + MSSQL2008. Hai mai pensato ad eventuali problemi come le prestazioni? Mi piacerebbe ottenere le stringhe localizzate caricate con impazienza. A proposito, non c'è bisogno per la colonna fittizia nella tabella localizzata. – curious1
Come ho detto sopra, penso che il problema del dummy column sia dovuto alla mia particolare combinazione di Eclipselink e MySQL: sembra che la tua combinazione di Hibernate e MSQL permetta di mantenere una singola colonna auto. I requisiti di volume per la particolare applicazione che stavo cercando erano minuscoli, quindi non ho trascorso molto tempo sui problemi di prestazioni. – IrishDubGuy
Qualche idea su quale sia l'approccio migliore per ottenere solo la stringa che corrisponde al valore di intestazione del linguaggio accept in un'applicazione spring rest resto? – aycanadal