2010-12-01 6 views
5

ich eine Klasse mit dem Namen des Films mit folgenden Feldern gemacht habe:Java Hibernate Mapping Ausnahme! (Kann nicht bestimmen Typen für: 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; 

wie Sie sehen können, habe ich verwendet Hibernate Annotations und Objekt Bean ist. aber wenn ich versuche, meine Hibernate-Sitzung mit dem folgenden Code zu öffnen ...

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

begegne ich ein Problem in Bezug auf keinen Java.Util.Map Klasse zuordnen konnte. Hier Ausnahme-Stack-Trace:

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) 

Ich bin neu zu überwintern und weiß nicht genau, was passiert ... mir bitte helfen!

+0

Welche Version von Hibernate verwenden Sie? – axtavt

Antwort

3

das ist, weil Sie einige jpa2 Implementierung verwenden! dieser Typ hatte die same problem

0

Haben Sie beide Getter und Setter für Eigenschaften haben?

+0

Ja, die Movie-Klasse ist vollständig bean, was bedeutet, dass sie alle Objekte und einen Standardkonstruktor als Setter und Getter definiert. – Ehphan

0

Sollten nicht Eigenschaften sein nur einen List<String> Typ?

Es klingt wie überwintert Verwirrung ist das gleiche wie meiner, das ist, warum ist properies eine Karte statt einer Liste? Was genau versuchst du da zu machen?

+0

gut, ich habe eine Liste von Eigenschaften für jedes Filmobjekt wie AKA, Sprache, Standort, Seitenverhältnis und ... dass sie von einem Objekt zum anderen ändern kann, was bedeutet, dass ein Zug alle von ihnen haben könnte und andere haben könnte nur 2 oder 3! Daher verwende ich eine Karte, um dieses Problem zu lösen, weil ich wegen einiger Probleme mit Lucine kein Null-Feld im Movie-Objekt haben wollte, und jetzt habe ich map, die den Eigenschaftsnamen als Schlüssel und Wert als Wert enthält! – Ehphan

0

Aah Ich sehe, es ist ein. Ich glaube nicht, dass man ein primitives Map abbilden kann, wenn man nicht das neueste jar verwendet. https://forum.hibernate.org/viewtopic.php?t=955308. Überprüfen Sie diesen Link. Könnten Sie eine Klasse namens Eigenschaften mit Schlüssel und Wert erstellen und dann verwenden? Ich hatte ein ähnliches Problem und musste diesen Ansatz verwenden.

+0

Sie meinen eine Klasse für Java Map zu ersetzen? – Ehphan

+0

Ja. Sie können dann eine Liste in Ihrer Hauptklasse hinzufügen. –

0

ich auch vor der gleiche problem.It spät ist, aber ich denke, es ist others.use @ MapKeyColumn.here helfen wird, ist mein einfacher Code

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