David

Categories

Latest News

Monthly archives

Links


Search




La asociación unidireccional one to many a una clase hija da problemas en Hibernate

Después de muchas horas trabajando en el asunto, he descubierto que el Hibernate no trabaja bien con asociaciones unidirireccionales uno a muchos (one to many) donde el lado de los muchos es una clase padre y la asociación real quiere hacerse a una clase hija. Esto pasa cuando las clases hijas se modelan con una tabla separada cada una (quizá no pase cuando se hace con un discriminador, no lo he comprobado).

Por ejemplo, tengo una clase Calendario que se asocia en modo uno a muchos de forma unidireccional a una clase Componente. Componente es abstracta de modo que la relación solo tiene sentido con las clases hijas de Componente, en este caso, una clase Evento.

Lo que ocurre es que en la base de datos se modelan esas relaciones colocando una clave ajena (foreign key) en la entidad del lado de muchos. Sin embargo, cuando se recorre la relación desde el lado del uno, internamente se coge el lado de los muchos y se comprueba cuales de esos registros tienen como clave ajena a la entidad del lado del uno.

Sea como fuere, Hibernate decide no realizar esa comprobación teniendo en cuenta las clases hijas.

En la documentación advierte que este tipo de relación es bastante problemática y que se utilice una relación bidireccional. Dicho y hecho, la cosa ahora funciona sin mayores problemas.

Menudo quebradero de cabeza.

Posted by dsuarez Posted in: informática, java, trabajo 1 Comment » May 2006


AJAX File Upload con JSF

Voy a describir el modo de hacer carga de ficheros mediante JSF utilizando AJAX. El método esta adaptado del que utiliza Martin Konicek en PHP.

Utilizaremos el componente FileUpload incluido en el Tomahawk de Apache Myfaces. En primer lugar creamos dos páginas web, una será la que contenga la imagen y otra el formulario. Incluimos la segunda en la primera mediante un iframe.

Configuramos la opción onChange del componente FileUpload para que ejecute un código javascript que cambia la imagen actual por otra imagen de carga (un indicador ajax por ejemplo). La forma de hacerlo es accediendo al documento padre y modificando el atributo src del img. A continuacion, se ejecutará un submit(). Esto establecerá el valor del UploadedFile del managed bean que da soporte al FileUpload. En el cuerpo del método setImage (o como se llame) del managed bean se guardará la imagen del modo que sea más adecuado (un fichero, una base de datos, en memoria, etc).

El iframe se recargará y se debe añadir un método en el onLoad del body. Éste método se encargará de modificar la imagen del documento padre para que apunte a la nueva imagen subida. Lo normal será pasarle como parámetro la localización de la nueva imagen, que habrá sido establecida por el setImage mencionado en el párrafo anterior.

Si todo es correcto, se vería el cambio de imagen :-)

Posted by dsuarez Posted in: informática, java 2 Comments » April 2006