2010-12-01 11 views
5

he hecho una clase con el nombre de la película con campos folowing:Java Hibernate Mapping Exception! (No se pudo determinar el tipo de: java.util.Map)

@Id 
@GeneratedValue 
private Long id; 
private String name; 
@ElementCollection(targetClass = String.class) 
private Map<String, String> properties; 
private Double rate; 
private Integer votersCount; 
private Date releaseDate; 
private Integer runtime; 
@ManyToMany 
@JoinTable(name = "movie_director") 
@IndexColumn(name = "directorIndex") 
private List<Person> directors; 
@ManyToMany 
@JoinTable(name = "movie_writer") 
@IndexColumn(name = "writerIndex") 
private List<Person> writers; 
@OneToMany 
@IndexColumn(name = "roleIndex") 
private List<MovieRole> movieRoles; 
@ManyToMany 
@JoinTable(name = "movie_genre") 
@IndexColumn(name = "genreIndex") 
private List<Genre> genres; 

como se puede ver, he utilizado la anotación de hibernación y el objeto es de frijol. pero cuando intento abrir mi sesión de hibernación con el siguiente código ...

session = HibernateSessionFactory.getSessionFactory().openSession(); 

me encuentro con un problema con respecto No se pudo asignar una clase Java.Util.Map. Aquí es excepción seguimiento de la pila:

org.hibernate.MappingException: Could not determine type for: java.util.Map, for columns: [org.hibernate.mapping.Column(properties)] 
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266) 
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253) 
at org.hibernate.mapping.Property.isValid(Property.java:185) 
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:410) 
at org.hibernate.mapping.RootClass.validate(RootClass.java:192) 
at org.hibernate.cfg.Configuration.validate(Configuration.java:1099) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1284) 
at main.HibernateSessionFactory.getSessionFactory(HibernateSessionFactory.java:29) 
at main.MainClass.main(MainClass.java:26) 

Soy nuevo en hibernación y no saben exactamente lo que está pasando ... por favor, ayúdame!

+0

¿Qué versión de Hibernate utiliza? – axtavt

Respuesta

3

¡eso se debe a que tiene que usar alguna implementación de jpa2! este individuo tenía el same problem

0

¿Tiene tanto getter como setter para Properties?

+0

Sí, la clase de película es totalmente bean, lo que significa que tiene setter y getter para todos los objetos y un constructor predeterminado. – Ehphan

0

¿Las propiedades no deberían ser solo de tipo List<String>?

Parece que la confusión de Hibernates es la misma que la mía, que es, ¿por qué Properies es un mapa en lugar de una lista? ¿Qué estás tratando de hacer exactamente allí?

+0

bueno, tengo una lista de propiedades para cualquier objeto de película como AKA, Idioma, Ubicación, Relación de aspecto y ... que pueden cambiar de un objeto a otro, lo que significa que un movimiento podría tener todos ellos y otro podría tener ¡solo 2 o 3! así que utilizo un mapa para resolver este problema, porque no quería tener un campo nulo en el objeto Película, debido a algunos problemas con Lucine, ¡y ahora tengo un mapa que contiene el nombre de la propiedad como clave y valor como valor! – Ehphan

0

Aah Veo, es a. No creo que puedas mapear un primitivo a menos que estés usando el último jar. https://forum.hibernate.org/viewtopic.php?t=955308. Verifique ese enlace. ¿Podría hacer una clase llamada como Propiedades con clave y valor y luego usarla? Tuve un problema similar y tuve que usar ese enfoque.

+0

te refieres a una clase para reemplazar por Java Map? – Ehphan

+0

Sí. A continuación, puede agregar una lista en su clase principal. –

0

También pesa sobre mí mismo problem.It es tarde, pero creo que va a ayudar a nadie.Uselo @ MapKeyColumn.here es mi código simple

@ElementCollection(targetClass=String.class) 
@MapKeyColumn(name="Employee_Position") 
private Map<String,String> position=new HashMap<String,String>(); 
Cuestiones relacionadas