无法确定类型:java.util.Map:JPA2 地图注释
Could not determine type for: java.util.Map: JPA2 Map annotation
我在独立模式下使用 JPA。启动 persistenceManager 时出现此错误:
工厂 = 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<>();
我做错了什么?
提前致谢!
targetClass
ElementCollection
的属性应用于地图时,指的是地图值的类型 - 在您的情况下,这是 InitRegister
另一方面,@MapKeyClass
指的是Map key的类型,是Integer
类型。
所以要纠正你的错误,你只需切换类型:
@ElementCollection(targetClass = InitRegister.class)
@MapKeyClass(Integer.class)
private Map<Integer, InitRegister> initRegisters;
如果您使用泛型,则无需指定 targetClass
和 MapKeyClass
。
所以这个也应该没问题:
@ElementCollection
private Map<Integer, InitRegister> initRegisters;
此外,请记住 @ElementCollection
仅用于基本类型和可嵌入类型。如果你的 InitRegister
class 恰好是一个实体类型,那么你不应该使用 @ElementCollection
。您应该使用集合值关系映射,@OneToMany
或 @ManyToMany
.
找到的解决方案:
实际上,所有更改都是在声明中完成的。我尝试在 getters 字段上添加注释并且......它有效。
不知道为什么。我知道这是一个很好的做法,但不是强制性的。
问题已解决。
我在独立模式下使用 JPA。启动 persistenceManager 时出现此错误: 工厂 = 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<>();
我做错了什么?
提前致谢!
targetClass
ElementCollection
的属性应用于地图时,指的是地图值的类型 - 在您的情况下,这是 InitRegister
另一方面,@MapKeyClass
指的是Map key的类型,是Integer
类型。
所以要纠正你的错误,你只需切换类型:
@ElementCollection(targetClass = InitRegister.class)
@MapKeyClass(Integer.class)
private Map<Integer, InitRegister> initRegisters;
如果您使用泛型,则无需指定 targetClass
和 MapKeyClass
。
所以这个也应该没问题:
@ElementCollection
private Map<Integer, InitRegister> initRegisters;
此外,请记住 @ElementCollection
仅用于基本类型和可嵌入类型。如果你的 InitRegister
class 恰好是一个实体类型,那么你不应该使用 @ElementCollection
。您应该使用集合值关系映射,@OneToMany
或 @ManyToMany
.
找到的解决方案:
实际上,所有更改都是在声明中完成的。我尝试在 getters 字段上添加注释并且......它有效。
不知道为什么。我知道这是一个很好的做法,但不是强制性的。
问题已解决。