2011-08-04 11 views
7

Utilicé Herramientas de Hibernate para generar mi asignación de POJO de Hibernate.org.hibernate.AnnotationException: Collection no tiene ningún tipo genérico o OneToMany.targetEntity()

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

org.hibernate.AnnotationException: Colección tiene ni el tipo genérico o OneToMany.targetEntity()

Las partes de 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 este post

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

y este post

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

Tienes que cambiar hiberna código generado por sí mismo con la mano.

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

Saludos

JS

Respuesta

12

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

simplemente marque "Uso de Java 5 Sintaxis" como se muestra en la captura de pantalla adjunta y Herramientas de Hibernate generar los tipos genéricos correctas para colecciones.

enter image description here

+1

¿Cuál es el propósito de "usar la sintaxis de Java 5"? ¿Cuáles son los inconvenientes de no usarlo? –

+0

Gracias por su ayuda. –

+1

@Dash el propósito de "utilizar la sintaxis de Java 5" es agregar genéricos a sus colecciones por lo que puedo ver ... –

6

Lo que las excepciones que dice es clara - yout @OneToMany colección debe especificar un tipo concreto (Set<AnotherEntity>) o tienen @OneToMany(targetEntity=AnotherEntity.class)

+0

Sí, pero esto sería algo que tenía que cambiar "a mano" después de generar el código a través de Hibernate Tools, esto es algo que quiero evitar, de lo contrario, cada vez que cambio la base de datos y genero los POJO a través de Hibernate Tools tengo que hacer esto yo mismo ... –

+0

es por eso que no debería regenerarlo. Al revés: use su modelo de objeto como base para los cambios de db – Bozho

+0

hm, esto es en realidad una parte que trato de evitar, tal vez encuentre otra solución ... –

0

Para utilizar Java 5 genéricos en una construcción automatizado, puede modificar sus argumentos para permitir JDK5 así:

<hbm2java jdk5="true"> 

Esta información se documenta aquí: Red Hat hbm2java docs.

1

Busque en "Red Hat hbm2java docs" porque el enlace está roto. Bonificación adicional para que no tenga 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 favor, 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.

1

Para quienes lo necesiten. 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.

Porque tengo solo 42 como reputación ¡no puedo hacer ningún comentario!

2

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

Cuestiones relacionadas