2008-11-20 6 views
5

Tengo una tabla en mi base de datos MYSQL que no tiene una clave principal, pero tiene una clave única en dos columnas. Al utilizar la herramienta de ingeniería inversa Hibernate de MyEclipse para crear una asignación para esa tabla, genera dos clases, una para el nombre de la tabla y otra con el sufijo "Id". Parece que la mayoría de los métodos útiles terminaron en la clase Id, por lo que parece que es la que crearías y guardarías para conservar los datos. Puedo apreciar el hecho de que la clase Id se crea para representar una fila única en el objeto tabla/mapeado, pero ¿de qué sirve dividir esto en dos clases, y cuál es el uso del no ID? ¿clase mezclada?¿Por qué la ingeniería inversa de Hibernate de MyEclipse crea múltiples clases al mapear ciertas tablas?

Mi colega argumenta que puede lograr lo mismo con una sola clase y se burla de utilizar la ingeniería inversa para estas tablas que no tienen una clave principal. Yo, por otro lado, supongo que los desarrolladores de MyEclipse son mucho más inteligentes que yo y que hay una muy buena razón para hacerlo de esta manera. ¿Esta ahí?

Respuesta

0

Supongo que es demasiado amigo. Esas herramientas no son en realidad del equipo MyEclipse, es del proyecto Hibernate Tools (JBoss, los desarrolladores de Hibernate).

Esta es una herramienta programática que no puede adivinar todo. Es bastante bueno para cosas simples bien anotadas, pero a veces, no generará exactamente lo que necesita.

La clase de identificación normalmente se necesita para representar una clave primaria compuesta (una clave que utiliza múltiples atributos). Utiliza las clases de componentes Concepto de Hibernate.

También es posible modificar un poco las opciones del generador.

En su caso, sería mejor que haga lo que dicen sus colegas. Crea tus propias clases de entidad.

0

En el archivo de ingeniería inversa:

<table schema="public" name="yourtable"> 
      <primary-key> 
       <!-- generator may not be necessary for mysql --> 
       <generator class="increment"></generator> 
       <key-column name="column_name_of_primary_key" /> 
      </primary-key> 
     </table> 
0

tuve un problema similar de ejecutar la herramienta en Eclipse para una instancia de Teradata. Tenía varios puntos de vista para invertir, y estaban en un esquema. Que estaba recibiendo la clase AcxiomDataId generado con esto:

<table catalog=".*" schema="U01TKE_GRPR_RADMT_VW" name="F_ACXM_MBR" class="AcxiomData"> 
    <primary-key> 
     <generator class="increment"></generator> 
     <key-column name="MBR_UNIQ_KEY" property="memberUniqKey" /> 
    </primary-key> 
</table> 

Pero quitando el esquema y atributos catálogo desde el elemento de la tabla, no he tenido la clase AcxiomDataId:

<table name="F_ACXM_MBR" class="AcxiomData"> 
    <primary-key> 
     <generator class="increment"></generator> 
     <key-column name="MBR_UNIQ_KEY" property="memberUniqKey" /> 
    </primary-key> 
</table> 

Ni idea de por qué es así.

0

Me encuentro con el mismo problema. Creo que cuando no tienes ninguna clave en la tabla, genera dos clases. De lo contrario, si tiene una clave en la tabla, genera solo una.

Al menos para mí después de agregar una clave principal en la tabla, está generando solo una clase que representa la tabla. Si elimino la clave primaria, genera dos clases.

Viejo hilo, pero pensé que sería útil para alguien.

0

Debe ingresar su nombre y verificar si ya configuró un campo como clave principal, luego el archivo de ingeniería inversa de hibernación, ya no hace clases múltiples.

Cuestiones relacionadas