Java Hibernate映射异常! (无法确定类型:java.util.Map)

时间:2010-12-01 13:32:38

标签: java hibernate-mapping hibernate-annotations

我创建了一个名为Movie的课程,其中包括以下字段:

    @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注释,对象是bean。 但是当我尝试使用以下代码打开我的休眠会话时......

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)

我刚接触休眠,并不确切知道发生了什么...... 请帮帮我!

5 个答案:

答案 0 :(得分:4)

那是因为你必须使用一些jpa2实现!这家伙有same problem

答案 1 :(得分:0)

属性不应只是List<String>类型吗?

听起来Hibernates的混淆与我的相同,为什么Properies是地图而不是列表?你到底想要做什么?

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我也遇到了同样的问题。现在已经很晚了,但我觉得它会对别人有所帮助。使用@ MapKeyColumn.here是我的简单代码

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

答案 4 :(得分:-1)

你有属性的getter和setter吗?