Para programadores JAVA: bbdd, DAO, registros....

  • Iniciador del tema Iniciador del tema Merlin
  • Fecha de inicio Fecha de inicio

Merlin

Miembro
10.552 mensajesdesde 2003
0 agradecimientos
"Bienvenido al maravilloso mundo de un lenguaje multiplataforma y orientado a objetos, versátil y sencillo".

Eso es lo que me dijeron y ahora me encuentro con un problemilla que es una chorrada y que cualquiera que pique en java sabrá responderme.

Imaginemos estas dos tablas:

tprovincias

prv_id: auto
prv_codigo: string
prv_nombre: string


tmunicipios

mun_id: auto
mun_idprovincia: int
mun_codigo: string
mun_nombre: string


Como todos sabemos, una provincia tendrá como mínimo un municipio, es decir, entre la tabla de provincias y municipios hay una relación 1 a n.

He escrito la clase DAO de la provincia con unos métodos, entre ellos:

int nuevaProvincia (RegProvincia registro);
boolean editaProvincia (RegProvincia registro);

RegProvincia es una clase que contiene toda la información de una provincia, es decir, tendrá como propiedades el id, el código y el nombre. Pero además, entiendo, como se trata de hacerlo todo con Hibernate, deberá de tener una propiedad que se refiera a los municipios de esta provincia, como por ejemplo algo al estilo "municipios: List", donde cada uno de los objetos de la lista, será un RegMunicipio (con su id, su código y su nombre. Entiendo que el idprovincia no debería de estar aquí).

Suponiendo que vaya bien, con un objeto de la clase RegProvincia, podré editar el nombre de un municipio, añadir tres municipios y borrar otro que había introducido duplicado o lo que sea. A la hora de aplicar los cambios en el objeto de la clase DAO de la provincia, se pasaría únicamente como parámetro la clase que representa al registro de la provincia y los cambios que ha habido en los municipios, deberían persistir a la base de datos.

Si alguien se ha perdido que me frene y me diga donde me he colado (que seguro que lo he hecho porque yo ya me he perdido).

En definitiva, cuando hay una relación 1 a n entre un maestro y un detalle, la clase que representa un registro del maestro debería de tener los datos de todo el conjunto de sus hijos.

¿Cuál es la forma de saber qué cambios ha habido en la tabla detalle y cómo implementarlos?.

Imagino que lo que no vale, es que cada vez que se edite el padre, borrar todos los hijos y volverlos a dar de alta.

Saludos.
 
He encontrado ésto

:freak :freak :freak :freak :freak :freak :freak :freak :freak :freak :freak :freak :freak :freak

Madre mía, ¿cuánto se tarda en asimilar esto?. Lo he leído y no acabo de pillarlo del todo. ¿Cuál es el truco para entenderlo de tal forma que se te quede en la sesera?.

Saludos.
 
Personalmente, no me lo creo... pero aquí te lo dejo....


ENTREVISTA A BJARNE STROUSTRUP

------------------------------------------

Traducción
El 1 de Enero de 1998, Bjarne Stroustrup dio una entrevista a la
revista de informatica del IEEE. Naturalmente, los editores pensaron
que el estaba dando una vision restrospectiva de los siete anos de
diseno orientado a objetos, usando el lenguaje que el mismo Había
creado.

Al finalizar la entrevista, el entrevistador consiguió mas de lo que
Había pactado en un principio, y consecuentemente, el editor decidio
suprimir los contenidos 'por el bien de la industria'. Pero como suele
suceder, la informacion se filtro...

Aquí esta una completa transcripción de lo que se dijo, no editado, no
ensayado, es decir que no es como las entrevistas planeadas...

Lo encontrareis interesante...



Int: Bien, hace unos pocos anos que cambio el mundo del diseno de
software, como se siente mirando atras?

BS: En este momento estaba pensando en aquellos dias, justo antes de
que llegases. Los recuerdas? Todo el mundo escribia en C y el problema
era que eran demasiado buenos... Las Universidades eran demasiado
buenas ensenandolo también. Se estaban graduando programadores
competentes a una velocidad de vértigo. Esa era la causa del problema.

Int: Problema?

BS: Si, problema. Recuerdas cuando todos programaban en Cobol?

Int: Desde luego. Yo también lo hice.

BS: Bien, al principio, esos tipos eran como semidioses. Sus salarios
eran altos, y eran tratados como la realeza...

Int: Aquellos fueron buenos tiempos, eh?

BS: Exacto. Pero, que paso? IBM se canso de ello, e invirtio millones
en entrenar a programadores, hasta el punto que podias comprar una
docena por medio dolar...

Int: Eso es por lo que me fui. Los salarios bajaron en un ano hasta el
punto de que el trabajo de periodista esta mejor pagado.

BS: Exactamente. Bien, lo mismo paso con los programadores de C...

Int: Ya veo, pero adonde quiere llegar?

BS: Bien, un dia, mientras estaba sentado en la oficina, pensaba en
este pequeno esquema, que podria inclinar la balanza un poquito. Pense
'Que ocurriria si existiese un lenguaje tan complicado, tan difícil de
aprender, que nadie fuese capaz de inundar el mercado de programadores?'
Empece cogiendo varias ideas del X10, ya sabes, X windows. Es una
autentica pesadilla de sistemas graficos, que solo se ejecutaba en
aquellas cosas Sun 3/60... tenia todos los ingredientes que yo buscaba.
Una sintaxis ridiculamente compleja, funciones oscuras y estructuras
pseudo-OO. Incluso ahora nadie escribe en código nativo para las
X-Windows. Motif es el unico camino a seguir si quieres mantener la
cordura.

Int: Esta bromeando?

BS: Ni un pelo. De hecho, existe otro problema... Unix esta escrito en
C, Lo que significa que un programador en C puede convertirse facilmente
en un programador de sistemas. Recuerdas el dinero que un programador
de sistemas solia conseguir?

Int: Puede apostar por ello. Es lo que solia hacer yo...

BS: Ok, por lo tanto, este nuevo lenguaje tenia que divorciarse por si
mismo de Unix, ocultando las llamadas al sistema. Esto podria permitir
a tipos que solo conocían el DOS ganarse la vida decentemente...

Int: No me puedo creer que haya dicho eso...

BS: Bueno, ha llovido mucho desde entonces. Ahora creo que la mayoria
de la gente se habra figurado que C++ es una perdida de tiempo, pero
debo decir que han tardado mas en darse cuenta de lo que pensaba.

Int: Entonces, que hizo exactamente?

BS: Se suponia que tenia que ser una broma, nunca pense que la gente
se tomase el libro en serio. Cualquiera con dos dedos de frente puede
ver que la programación orientada a objetos es anti intuitiva, ilogica
e ineficiente...

Int: Que?!?!

BS: Y como el código reutilizable... cuando has oido de una compania
que reutilice su código?

Int: Bien, nunca, pero...

BS: Entonces estas de acuerdo. Recuerda, algunos lo intentaron al
principio. Había esa compania de Oregon, creo que se llamaba Mentor
Graphics, que revento intentando reescribir todo en C++ en el 90 o
91. Lo siento realmente por ellos, pero pense que los demas
aprenderían de sus errores.

Int: Obviamente no lo hicieron, verdad?

BS: Ni lo mas minimo. El problema es que la mayoria de las empresas
se callaron sus mayores disparates, y explicar 30 millones de dolares
de perdidas a los accionistas podria haber sido dificil... Demosles el
reconocimiento que merecen, finalmente consiguieron hacer que funcionase

Int: Lo hicieron? Bien eso demuestra que la OO funciona...

BS: Casi. El ejecutable era tan gigantesco que tardaba unos cinco
minutos en cargar en una estacion de trabajo de HP con 128 MB de RAM.
Iba tan rapido como un triciclo. Crei que seria un escollo insalvable
pero nadie se preocupo. SUN y HP estaban demasiado alegres de vender
enormes y poderosas maquinas con gigantescos recursos para ejecutar
programas triviales. Ya sabes, cuando hicimos nuestro primer compilador
de C++, en AT&T, compile el clásico 'Hello World', y no me podia creer
el tamano del ejecutable. 2.1 MB.

Int: Que ?!?!. Bueno, los compiladores han mejorado mucho desde
entonces...

BS: Lo han hecho? Inténtalo en la ultima verision de g++, la diferencia
no sera mayor que medio mega. Además existen multitud de ejemplos
actuales en todo el mundo. British Telecom tuvo un desastre mayor en
sus manos, pero, afortunadamente, se deshicieron de ello y comenzaron
de nuevo. Tuvieron mas suerte que Australian Telecom. Ahora he oido
que Siemens esta construyendo un dinosaurio y se empiezan a preocupar
porque los recursos hardware no hacen mas que crecer para hacer
funcionar ejecutables tipicos. No es una delicia la herencia multiple?

Int: Bien, pero C++ es un lenguaje avanzado ...

BS: Realmente crees eso ?!?!?! Te has sentado alguna vez y te has
puesto a trabajar en un proyecto C++? Esto es lo que sucede: Primero
he puesto las suficientes trampas para asegurarme de que solo los
proyectos mas triviales funcionen a la primera. Coge la sobrecarga de
operadores. Al final del proyecto casi todos los modulos lo tienen,
normalmente los programadores sienten que deberían hacerlo asi porque
es como les ensenaron en sus cursos de aprendizaje. El mismo operador
entonces significa cosas diferentes en cada modulo. Intenta poner
unos cuantos juntos, cuando tengas unos cientos de modulos. Y para la
ocultacion de datos. Dios, a veces no puedo parar de reirme cuando oigo
los problemas que algunas empresas han tenido al hacer a sus modulos
comunicarse entre si. Creo que el termino 'sinergetico' fue
especialmente creado para retorcer un cuchillo en las costillas del
director de proyecto...

Int: Tengo que decir que me siento bastante pasmado por todo esto.
Dice que consiguió subir el salario de los programadores? Eso es
inmoral.

BS: No del todo. Cada uno tiene su opcion. Yo no esperaba que la cosa
se me fuese tanto de las manos. De cualquier forma acerté. C++ se esta
muriendo ahora, pero los programadores todavía conservan sus sueldos
altos. Especialmente esos pobres diablos que tienen que mantener toda
esta majaderia. Comprendes que es imposible mantener un gran modulo en
C++ si no lo has escrito tu mismo?

Int: Como?

BS: Estas fuera de juego, verdad? Recuerdas 'typedef'?

Int: Si, desde luego.

BS: Recuerdas cuanto tiempo se perdia buscando a tientas en las
cabeceras sola para darse cuenta de que 'RoofRaised' era un numero
de doble precision? Bien, imagina el tiempo que te puedes tirar para
encontrar todos los typedefs implicitos en todas las clases en un
gran proyecto.

Int: En que se basa para creer que ha tenido exito?

BS: Te acuerdas de la duracion media de un proyecto en C?. Unos 6
meses. No mucho para que un tipo con una mujer e hijos pueda
conseguir un nivel de vida decente. Coge el mismo proyecto,
realizalo en C++ y que obtienes? Te lo dire. Uno o dos anos. No es
grandioso? Mucha mas seguridad laboral solo por un error de juicio.
Y una cosa mas. Las universidades no han estado ense_ando C desde
hace mucho tiempo, lo que produce un descenso del numero de buenos
programadores en C. Especialmente de los que saben acerca de la
programación en sistemas Unix. Cuantos tipos sabrian que hacer con
un 'malloc', cuando han estado usando 'new' durante estos anos y
nunca se han preocupado de de chequear el código de retorno?. De
hecho la mayoria de los programadores en C++ pasan de los códigos que
les devuelven las funciones. Que paso con el '-1'? Al menos sabias
que tenias un error, sin enredarte con 'throw', 'catch', 'try'...

Int: Pero seguramente la herencia salve un monton de tiempo?

BS: Lo hace? Te has fijado en la diferencia entre un proyecto en C y
el mismo en C++? La etapa en la que se desarrolla un plan en un
proyecto en C++ es tres veces superior. Precisamente para asegurarse
de que todo lo que deba heredarse, lo hace, lo que no, no. Y aun asi
sigue dando fallos. Quien ha oido hablar de la perdida de memoria en
un programa en C? Ahora se ha creado una autentica industria
especializada en encontrarlas. Muchas empresas se rinden y sacan el
producto, sabiendo que pierde como un colador, simplemente para
reducir el gasto de buscar todas esas fugas de memoria.

Int: Hay herramientas...

BS: La mayoria escritas en C++.

Int: Si publicamos esto, probablemente le lincharan. Se da cuenta?

BS: Lo dudo. Como dije, C++ esta en su fase descendente ahora y
ninguna compania en su sano juicio comenzaría un proyecto en C++
sin una prueba piloto. Eso debería convencerles de que es un camino
al desastre. Si no lo hace, entonces se merecen todo lo que les pase.
Ya sabes?, yo intente convencer a Dennis Ritchie a reescribir Unix en
C++...

Int: Oh Dios. Que dijo?

BS: Afortunadamente tiene un buen sentido del humor. Creo que tanto
el como Brian se figuraban lo que estaba haciendo en aquellos dias, y
nunca empezaron el proyecto. Me dijo que me ayudaría a escribir una
version en C++ de DOS, si estaba interesado...

Int: Lo estaba?

BS: De hecho ya he escrito DOS en C++, te pasare una demo cuando
pueda. Lo tengo ejecutandose en una Sparc 20 en la sala de ordenadores.
Va como un cohete en 4 CPUs, y solo ocupa 70 megas de disco...

Int: Como se comporta en un PC?

BS: Ahora estas bromeando. No has visto Windows '95? Creo que es mi
mayor exito. Casi acaba con la partida antes de que estuviese
preparado

Int: Ya sabes, la idea de Unix++ me ha hecho pensar. Quizás haya
alguien ahí fuera intentandolo.

BS: No despues de leer esta entrevista.

Int: Lo siento, pero no nos veo capaces de publicar esto.

BS: Pero es la historia del siglo. Solo quiero ser recordado por
mis compañeros programadores, por lo que he hecho por ellos. Sabes
cuanto puede conseguir un programador de C++ hoy dia?

Int: Lo ultimo que oi fue algo como unos $70 - $80 la hora para uno
realmente bueno...

BS: Lo ves? Y se los gana a pulso. Seguir la pista de todo lo que
he puesto en C++ no es facil. Y como dije anteriormente, todo
programador en C++ se siente impulsado por alguna promesa mistica
a usar todos los elementos del lenguaje en cada proyecto. Eso
ciertamente me molesta a veces, aunque sirva a mi proposito original.
Casi me ha acabado gustando el lenguaje tras todo este tiempo.

Int: Quiere decir que no era asi antes?

BS: Lo odiaba. Parece extrano, no estas de acuerdo? Pero cuando los
beneficios del libro empezaron a llegar... bien, te haces una idea...

Int: Solo un minuto. Que hay de las referencias?. Debe admitir que
mejoro los punteros de C...

BS: Hmm. Siempre me he preguntado por eso. Originalmente crei que lo
Había hecho. Entonces, un dia estaba discutiendo esto con un tipo que
escribe en C++ desde el principio. Dijo que no podia recordar cuales
de sus variables estaban o no referenciadas, por lo que siempre usaba
punteros. Dijo que el pequeno asterisco se lo recordaba.

Int: Bien, llegados a este punto suelo decir 'muchas gracias' pero
hoy no parece muy adecuado.

BS: Prométeme que publicaras esto. Mi conciencia esta dando lo mejor
de mi mismo estos dias.

Int: Se lo hare saber, pero creo que se lo que dira mi editor...

BS: Quien se lo creeria de todas formas?... De todos modos, puedes
enviarme una copia de la cinta.?

Int: Descuide, lo hare.
 
No me creo tampoco la entrevista sin pensar que hay mucho humor por el medio.

Por cierto, que creo que me voy enterando... no hay nada como el viejo truco de coger boli, papel y escribir código de ejemplo sin utilizar para nada el ordenador.

De aqui a pocos días espero ya ser experto en este coñazo.

Saludos.
 
Pues yo también me tomo un poco a broma la entrevista, ¿realmente creeis que la orientación a objetos no ha avanzado nada? Es verdad que la captura de excepciones desespera :sudor , es verdad que todos sobrecargamos operadores porque así nos han dicho en las Universidades y luego es un jaleo porque en cada objeto cada cosa funciona distinta, que yo por lo menos soy superrespetuoso con lo enseñado (por ejemplo siempre utilizar herencia o polimorfismo cuando muchas veces es una chorrada y lo único que haces es liarla para ahorrarte 10 lineas), es verdad que pierdes la tira de tiempo leyendo cabeceras para ver los metodos y como funcionan, pero yo creo que si ahorras bastante tiempo si te sabes manejar y extender las clases correctas. Lo de que no se reutiliza código, pues digo yo que es problema de las empresas porque anda que no se puede cambiar por ejemplo todo el motor gráfico manteniendo la misma estructura, anda que no se pueden reutilizar buenos códigos de detección y corrección de errores, etc...
 
Ahí es donde entra en juego un buen IDE. En Delphi no pierdes tiempo ni viendo las cabeceras ni escribiendo dos veces lo mismo en la declaración y en la implementación, el IDE, con un habilidoso sistema de combinación de teclas, te permite hacer casi cualquier cosa.

Para mí no hay otro mejor.

Saludos.
 
Ya pero es que el Delphi ni lo he tocado todavía :juas , ya te dije que quería meterme a aprender algo por mi cuenta, a ver si despues del verano, creo que ayudará a que como idioma base en primero de carrera dí Pascal ¿no?

Un saludo.
 
Sinceramente, si lo que buscas es futuro, hoy lo que está de moda es JAVA... desafortunadamente.

Saludos.
 
Java se me da bien (saqué Matrícula de Honor en la asignatura que llevaba un proyecto en programación en Java en la Uni con un programa de autoescuela) pero todavía no he trabajado en nada de programación así que a lo mejor me meto y me la meto literalmente al ser tan distinto el mundo laboral del acádemico y sobre todo porque yo soy mucho de llevar por mi cuenta los proyectos (si quieres algo bien hecho...); ahora estoy con un intensivo de Programador de Sistemas y de momento me lia bastante mas que la programación y me está costando lo suyo... :sudor Sobre todo Linux y sus mil comandos y archivos editables con permisos y rollos y todo el tema de encaminamiento me está jodiendo padre, lo que mejor se me da son los pequeños scripts en Linux porque basta con un par de algoritmos de primero de carrera así que imáginate...

Despues del verano veré para donde tiro.
 
Yo en programación solo para sistemas. Pequeños scripts (linux/win) para facilitarme el trabajo. En el resto soy un completo desastre. Todavia tengo pesadillas con el C++ de cuando tuve que hacer las PUTAS torres de Hanoi con dibujitos...
 
A mi lo que más me jodía era la recursividad sin duda, en primero en "Estructuras de datos y algoritmos" había que implementar arbol, pilas, colas y demás en Pascal y la puta recursivdad era a veces desesperante. Lo peor fué en segundo en una asignatura de C (a secas) me tocó hacer un programa que hacía lo mismo que el dir de Ms-Dos y había que hacerlo todo de forma recursiva, la de veces que se me reiniciaba el ordenador porque petaba la memoria :lol
 
Pero si las torres de Hanoi están chupadas de hacer tío... anda ya, no te quedes conmigo, las hice hasta programando los gráficos con rutinas en ensamblador y podías elegir el número de discos, desde 3 hasta 64 (nunca ví al PC poder terminar de resolver a partir de unos treinta y pico, se tiraba horas y horas y parecía que nunca terminaba, y claro, antes me cansaba yo y apagaba el PC).

Y respecto al mercado laboral, olvídate de los lenguajes elegantes, hoy lo que se busca es aquello que está de moda.

Saludos.
 
Cómo has implementado la clase hijo, como herencia polimórfica del padre, el padre como la interfaz y el hijo su implementación o lo has hecho a pelo sin ninguna relación entre ambas?
 
Merlin dijo:
Pero si las torres de Hanoi están chupadas de hacer tío... anda ya, no te quedes conmigo, las hice hasta programando los gráficos con rutinas en ensamblador y podías elegir el número de discos, desde 3 hasta 64 (nunca ví al PC poder terminar de resolver a partir de unos treinta y pico, se tiraba horas y horas y parecía que nunca terminaba, y claro, antes me cansaba yo y apagaba el PC).

Y respecto al mercado laboral, olvídate de los lenguajes elegantes, hoy lo que se busca es aquello que está de moda.

Saludos.

Es que tengo clarisimo que la programación no es lo mio!
 
Ni lo uno ni lo otro, el Hibernate no genera de forma automática clases con herencia en estos casos, ya que la relación se hace en el "mapping", no a nivel de clases. En el fondo no tiene nada que ver una clase con otra, aunque esto es algo que estamos discutiendo en el trabajo, que hay quien quiere ir "a lo que dicen los libros" y otros a lo práctico que de mejor relación coste desarrollo vs resultado obtenido.

En realidad he diseñado una base de datos completa, no son muchas tablas (creo que son 35), pero ahora me toca definir las clases que manejarán esos datos, tanto las BEAN como las DAO y aquí a ver que ocurre, porque si que hay otras tablas que tiene lógica implementar sus clases como descendientes de otras, como el caso de las tablas de menús y de menús personalizados por usuario.... pero entre provincia y municipio, me cuesta mucho ver la relación de jerarquía.

Oye, al final va a salir hasta un debate interesante y todo ;)

Saludos.
 
Atrás
Arriba