我创建了一个名为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)
我刚接触休眠,并不确切知道发生了什么...... 请帮帮我!
答案 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吗?