2010-12-01 63 views
5

我与电影的名字一类具有如下因素字段:Java Hibernate映射异常! (无法确定类型: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; 

你可以看到,我已经使用Hibernate的注释和对象是豆。 但是当我尝试用下面的代码打开我的Hibernate Session ...

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

我就遇到无法映射Java.Util.Map类的问题。 这里是异常堆栈跟踪:

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) 

我是新来的休眠,不知道到底发生了什么...... 请帮帮我!

+0

你使用哪种版本的Hibernate的? – axtavt 2010-12-01 15:55:56

回答

0

你有属性的getter和setter吗?

+0

是的,Movie类是完全的bean,意思是所有对象和默认构造函数都有setter和getter。 – Ehphan 2010-12-01 13:38:33

0

不应该属性只是一个List<String>类型?

这听起来像希伯尼特人的困惑是一样的我的是,为什么是一个地图,而不是一个清单?你到底想要做什么?

+0

好吧,我有任何电影对象的属性列表,如AKA,语言,位置,长宽比和...他们可以从一个对象更改为另一个,这意味着一个动作可以拥有所有这些,另一个可以拥有只有2或3!所以我使用地图来解决这个问题,因为我不想在Movie对象中有一个空字段,由于Lucine的一些问题,现在我有包含属性名称作为键值的值的地图! – Ehphan 2010-12-01 13:47:08

0

啊我看到了,它的a。我不认为你可以映射一个原语,除非你使用最新的jar。 https://forum.hibernate.org/viewtopic.php?t=955308。检查该链接。你可以使用key和value来创建一个名为Properties的类,然后使用它吗?我有类似的问题,我不得不使用这种方法。

+0

你的意思是一个类来取代Java Map? – Ehphan 2010-12-01 13:53:38

0

我也面临着同样的problem.It是迟,但我认为这将有助于others.use @ MapKeyColumn.here是我简单的代码

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