2011-08-29 12 views
6

Estoy intentando asignar las tablas de una base de datos (de 60 tablas) utilizando JPA. Estoy haciendo esto para una aplicación multilingüe, por lo tanto, cada dato debe estar disponible en más de un idioma.Asignación de tablas i18n en JPA

Mi estructura de tabla de base de datos es algo como esto. Tengo una tabla de Región, que está relacionada con una tabla de RegionLanguage. La tabla RegionLanguage contiene la descripción de esa región en diferentes idiomas. Es posible que desee echar un vistazo a este diagrama:

enter image description here

Cuando se trata de la APP, se me hace difícil de mapa de una manera que requeriría como pequeñas asociaciones como sea posible. Intenté usar el concepto de tabla secundaria, pero falla en algunas ocasiones ya que esta es una relación @OneToMany. Preferiblemente, estaba pensando en una solución que haría que estas dos tablas aparecieran como un solo objeto.

Su ayuda es apreciada.

Gracias de antemano.

+2

¿Has encontrado una solución para este problema? Y si es así, ¿te importaría compartirlo (como respuesta)? Nos enfrentamos al mismo problema, todavía no hemos encontrado una buena solución (la mayoría da como resultado consultas N + 1, que definitivamente no queremos). – wimvds

+0

¿Qué proveedor de JPA estás usando? – siebz0r

+0

No entiendo completamente por qué una simple asociación @OneToMany entre Region y RegionLanguage no funciona para usted? –

Respuesta

0

No estoy seguro de entender este extraño diagrama ... RegionLanguage tiene algún tipo de clave foránea que apunta a Region.id, ¿lo tomo? Si Region tiene solo una columna (como se muestra en el 'diagrama'), simplemente puede asignar solo 'RegionLanguage' y solo tendrá una entidad como usted quería --- sin pérdida de información;).

Pero en serio, ¿cómo lo querrías mapear? ¿Usted quiere tener algo como esto:

class Region { 
//.. the missing fields not shown in diagram 
    List<String> languages; // take only language to avoid creating separate entity for region language 
} 

o menos así:

class RegionInnerJoinRegionLanguage { 
// all fields from Region 
// all fields from RegionLanguage 
} 

En cualquier caso, usted no ha dicho cómo el resto de las tablas se unen con sus tablas i18n. Según su descripción, supongo que todas las tablas tienen fk en RegionLanguage. No estoy seguro de para qué se usa la tabla Region en el gran esquema de cosas. Supongo que es solo para agrupar los idiomas ... Me imagino que esto 'modelos' Suiza (una 'región' 4 idiomas) ... ¿Pero qué vas a hacer con los idiomas que se hablan en varias regiones? ¿Vas a tener varios idiomas en francés, inglés, etc. (uno para cada región) y todos los datos multiplicados para cada uno de esos?

Sé que no pides esto ... Creo que simplificaste demasiado tu estructura de datos para esta pregunta ... Tanto que es difícil adivinar lo que realmente quieres lograr.

En cualquier caso, si desea utilizar la lista de enfoque de cadenas, puede intentar esto:

@ElementCollection 
    @CollectionTable(name="RegionLanguage", 
     [email protected](name="regionID") // or whatever... it's not on your diagram. 
) 
    @Column(name="langage") 
    private List<String> langages; 

Todavía no entiendo por qué usted quiere poner las dos tablas en una sola entidad .. . Si se trata de datos de "solo lectura", puede intentar crear una vista y mapearla, siempre una "salida";). Pero es (ambos, de hecho) un poco de complicación, en mi opinión, te va a morder en el futuro. Mi consejo es ir con 'simple mapping de OneToMany'.

Cuestiones relacionadas