tools engineering java hibernate annotations hibernate-tools

java - engineering - org.hibernate.AnnotationException: Collection no tiene tipo genérico ni OneToMany.targetEntity()



hibernate tools eclipse (6)

Lo que las excepciones le dicen es claro: su colección @OneToMany debe especificar un tipo concreto ( Set<AnotherEntity> ) o tener @OneToMany(targetEntity=AnotherEntity.class)

Usé Hibernate Tools para generar mi mapeo de Hibernate POJO.

Lamentablemente, el código generado por las herramientas de Hibernate parece no funcionar, recibo la excepción

org.hibernate.AnnotationException: Collection no tiene tipo genérico ni OneToMany.targetEntity ()

Las partes del código que generan la excepción son

/** * ClassFlag generated by hbm2java */ @Entity @Table(name = "class_flag", catalog = "incbszdb") public class ClassFlag implements java.io.Serializable { .... /* HERE */ private Set classFlagI18ns = new HashSet(0); /* HERE */ public void setClassFlagI18ns(Set classFlagI18ns) { this.classFlagI18ns = classFlagI18ns; } }

De acuerdo con esta publicación

http://www.mkyong.com/hibernate/org-hibernate-annotationexception-collection-has-neither-generic-type-or-onetomany-targetentity/comment-page-1/#comment-67404

y esta publicación

http://www.mkyong.com/hibernate/hibernate-error-collection-has-neither-generic-type-or-onetomany-targetentity/

Tienes que cambiar el código generado por Hibernates tú mismo a mano.

Esto es una cosa que quiero evitar. Alguna idea de lo que podría ser el problema?

Saludos

JS


He encontrado una solución para mí que funciona.

Simplemente marque "Usar la sintaxis de Java 5" como se muestra en la captura de pantalla adjunta y las herramientas de Hibernate generan los tipos genéricos correctos para las colecciones.


Para utilizar java 5 genéricos en una compilación automatizada, puede modificar sus argumentos para habilitar jdk5 de esta manera:

<hbm2java jdk5="true">

Esta información está documentada aquí: documentos de Red Hat hbm2java .


Busque en "Red Hat hbm2java docs" porque el enlace está roto. Bonificación adicional para que no tengas que buscar. Seleccione ambas casillas de verificación para "modernizar" la Java generada. Desafortunadamente, las etiquetas de las casillas de verificación no indican qué sucede si las revisas. Uno podría pensar que "Usar la sintaxis de Java 5" tiene muchas implicaciones y, como está desactivado por defecto, no es el comportamiento deseado / típico.

Por supuesto, marque ambas casillas para usar anotaciones y genéricos. Luego dígale a Eclipse bajo las opciones de "limpieza" para generar el UID de la versión en serie. Me tomó 3 días entender todo esto.


Para aquellos que necesitan Por lo que recuerdo, con Java EE 5, Java Enterprise Edition obtuvo muchas funcionalidades, particularmente en el uso de anotaciones y genéricos. Entonces, es por eso que creo que comprobar "Usar la sintaxis de Java 5" en Eclipse, o "Compatibilidad con Java 5" (no estoy seguro del término exacto en la interfaz de usuario) en Netbeans, al generar las entidades con Hibernate, me aseguraré de que el código generado esas ''nuevas funcionalidades'' de Java 5 en contar.

¡Debido a que tengo solo 42 como reputación, no puedo comentar!


Usar la sintaxis de Java 5 es la respuesta correcta ... pero es muy engañoso. Debería usar la sintaxis Java 5+ ... quién pensaría usar Java 5.