Asociacion entre clases

1 view
Skip to first unread message

victor3107

unread,
Oct 20, 2009, 9:46:57 AM10/20/09
to is1_unal_2009_02
Buenos Dias a todos
La pregunta duda es esta:
Resulta que tengo dos entidaes con relacion de uno a muchos y la
coloque como una ArrayList, pero necesito ademas que cada elemento de
la ArrayList tenga un identificador adicional, como puedo hacer esto.
Yo creo que con un HasbMap, pero no se como funciona el HasbMap (ni
siquiera se como se escribe bien).
Grax.
ATT: Victor Pacheco

miguel

unread,
Oct 20, 2009, 1:22:08 PM10/20/09
to is1_unal...@googlegroups.com


El 20 de octubre de 2009 08:46, victor3107 <victorpa...@gmail.com> escribió:

Buenos Dias a todos

Buenos días Víctor
 
La pregunta duda es esta:
Resulta que tengo dos entidaes con relacion de uno a muchos y la
coloque como una ArrayList, pero necesito ademas que cada elemento de
la ArrayList tenga un identificador adicional, como puedo hacer esto.

En efecto, lo puede hacer con un HashMap, cuando tenga dudas acerca de qué tipos de clase existen y las características de las mismas, puede recurrir a la documentación de Java, bastará con escribir en el buscador "java api" y el primer enlace probablemente será el que usted necesita, ahí tendrá una documentación en javadoc (como la que ya aprendimos a generar con NetBeans). Específicamente, en el caso del HashMap, podrá encontrar la doc de esta clase en:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/HashMap.html

Notará que esta clase implementa generics usando dos parámetros, el primero (K) es la clave, el segundo (V) es el valor, de manera que usted podrá usar una declaración del tipo:

HashMap<Integer, MiObjeto> valores = new HashMap<Integer, MiObjeto>();

donde la llave es de tipo entero y el valor de tipo MiObjeto. Para agregar cualquier elemento a este HashMap usaría algo como:

MiObjeto aAgregar = new MiObjeto();
valores.put(1, aAgregar);

Notará que si intenta hacer algo como
valores.put("uno", aAgregar);
obtendrá un error de compilación, esto es porque la clave "uno" no es de tipo "Integer" como lo había definido previamente.

Ahora bien, si hace algo como:

MiObjeto aAgregarPrimero = new MiObjeto();
MiObjeto aAgregarDespues = new MiObjeto();
valores.put(1, aAgregarPrimero);
valores.put(1, aAgregarDespues);

se guardará solamente el segundo, ya que, según se define en el método put (cito textualmente):
If the map previously contained a mapping for this key, the old value is replaced

Por otra parte, cuando desee obtener algún elemento de este HashMap puede usar el método get pasándole como parámetro la clave (tenga en cuenta que la búsqueda sobre un elemento por un campo que no sea la clave sería mucho más costosa). Por ejemplo, si después de usar la sentencia de doble inserción que usamos antes utiliza:

valores.get(1);

le retornaría aAgregarDespues.

Debo decir que no creo que necesite usar este tipo de colecciones por ahora, si necesita usar una clave creo que sería suficiente con agregarla en la entidad y no en la relación. Si nos explica de una forma más detallada el caso específico en el que está trabajando y que le ha presentado esta dificultad, quizás podamos darle una mejor sugerencia.

Grax.
ATT: Victor Pacheco

Con mucho gusto, espero haber aclarado un poco el tema.

--
Miguel Cubides
Ingeniería de Sistemas
Universidad Nacional

victor3107

unread,
Oct 21, 2009, 6:52:30 PM10/21/09
to is1_unal_2009_02
resulta que tengo una entidad viaje. un viaje tendra un camion
(relacion uno a uno con la entidad camion),
el lista de producto (relacion uno a muchos hacia producto, ArrayList)
y dos bodegas (solo dos) una de origen y
otra de destino, asi que tengo una agregacio navegable de uno a muchos
de viajes hacia bodega, entonces como
haria para saber cual bodega es la destino y cual la de origen?
yo pensaba hacerlo con un haspMap (si se puede), osea que la relacion
de viajes hacia bodega la defino como
un HaspMap en ves de un ArrayList y que las llaves del HaspMap solo
tomarian dos valores 0 y 1, 0 para la bodega
de origen y 1 para lo bedega de destino.
Estos son los motivos por los que pensaba utilizar esto, si se puede
hacer de otra forma agradeceria que se me
informara.
Gracias.

miguel

unread,
Oct 24, 2009, 9:56:42 PM10/24/09
to is1_unal...@googlegroups.com
Buenos días Víctor y en general a todos los integrantes del grupo, ofrezco disculpas por la tardanza en la respuesta a algunos correos, pero estaba atendiendo otros asuntos, espero que esto no haya causado dificultades para ustedes.


Veamos, entonces necesita hacer una relación de uno a dos, en efecto puede hacerlo con un HashMap, pero me parece que sería más sencillo y legible usar dos agregaciones de uno a uno, de esta manera tendría una para bodegaDestino y otra para bodegaOrigen.
 
Gracias.

Con gusto, espero que esta información le sea útil. Hasta luego,
Reply all
Reply to author
Forward
0 new messages