无法确定以下类型:java.util.Map:JPA2 Map注释

时间:2015-11-12 17:31:53

标签: jpa dictionary mapping

我在独立模式下使用JPA。启动persistenceManager时出现此错误: factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);

我已经测试过围绕网络进行的几项工作......没有成功。 你能给我一些线索吗?

无法确定类型:java.util.Map .................. 对于列:[org.hibernate.mapping.Column(initRegisters)]

我已按照以下方式配置了我的映射:

@ElementCollection(targetClass = Integer.class)
@MapKeyClass(InitRegister.class)
private Map<Integer, InitRegister> initRegisters = new HashMap<>();

我做错了什么?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

应用于地图时,targetClass

ElementCollection属性指的是地图值的类型 - 在您的情况下,这是InitRegister

另一方面,@MapKeyClass指的是Map键的类型,它是Integer类型。

因此,为了解决您的错误,您只需切换类型:

@ElementCollection(targetClass = InitRegister.class)
@MapKeyClass(Integer.class)
private Map<Integer, InitRegister> initRegisters;

如果您使用的是泛型,则无需指定targetClassMapKeyClass

所以这个也应该没问题:

@ElementCollection
private Map<Integer, InitRegister> initRegisters;

另请注意,@ElementCollection仅用于基本类型和可嵌入类型。如果您的InitRegister类恰好是实体类型,则不应使用@ElementCollection。您应该使用集合值关系映射,@OneToMany@ManyToMany

答案 1 :(得分:0)

找到解决方案:

实际上,所有变更都是在声明上完成的。我试图在getters字段上添加注释,并且......它可以工作。

不知道为什么。我知道这是一种很好的做法,但不是强制性的。

Prob解决了。