【问题标题】:Java Hibernate Mapping Exception! (Could not determine type for: java.util.Map)Java Hibernate 映射异常! (无法确定类型:java.util.Map)
【发布时间】:2011-05-18 12:18:07
【问题描述】:

我创建了一个名为 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)

我是 hibernate 新手,不知道到底发生了什么... 请帮帮我!

【问题讨论】:

  • 你使用哪个版本的 Hibernate?

标签: java hibernate-mapping hibernate-annotations


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我也面临同样的问题。虽然很晚,但我认为它会帮助其他人。使用@MapKeyColumn。这是我的简单代码

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

    【讨论】:

      【解决方案3】:

      属性不应该只是 List&lt;String&gt; 类型吗?

      听起来Hibernates的困惑和我的一样,为什么Properies是一个地图而不是一个列表?你到底想在那里做什么?

      【讨论】:

      • 好吧,我有一个任何电影对象的属性列表,例如 AKA、语言、位置、纵横比和...它们可以从一个对象更改为另一个对象,这意味着一个动作可以有所有这些和另一个可能只有 2 或 3 个!所以我使用地图来解决这个问题,因为由于 Lucine 的一些问题,我不想在 Movie 对象中有一个空字段,现在我有一个地图,其中包含属性名称作为键和值作为值!
      【解决方案4】:

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

      【讨论】:

      • 您的意思是要替换 Java Map 的类?
      • 是的。然后,您可以在主类中添加 List
      【解决方案5】:

      你有属性的getter和setter吗?

      【讨论】:

      • 是的,Movie 类完全是 bean,这意味着所有对象都有 setter 和 getter 以及默认构造函数。
      猜你喜欢
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      相关资源
      最近更新 更多