【问题标题】:Mapping a Map<String, Double> with Hibernate and JPA使用 Hibernate 和 JPA 映射 Map<String, Double>
【发布时间】:2011-08-31 02:11:25
【问题描述】:

我尝试以下映射

@ElementCollection
private Map<String, Double> doubleValues;

但是当我由此生成我的架构时(使用 mvn hibernate3:hbm2ddl),我收到以下错误:

org.hibernate.MappingException: Could not determine type for: java.util.Map, at table: ImagerAnalysisResult, for columns: [org.hibernate.mapping.Column(doubleValues)]

我尝试向其中添加列和类型信息,但我不断收到相同的错误。另外,我认为不应该提供信息,因为hibernate应该使用通用声明(根据How to map a Map<String,Double>)。

我用的是hibernate 3.6.4.Final,我也试过其他版本

有什么建议吗?谢谢。

编辑:maven hibernate 插件似乎已有两年历史,并且依赖于较旧的 hibernate 版本...为什么不维护这个插件?

编辑:命名字段“doubleValues”以确保没有保留名称问题。

【问题讨论】:

    标签: java hibernate jpa hibernate-mapping


    【解决方案1】:

    你可以尝试更明确:

    @ElementCollection
    @CollectionTable(name = "MY_ENTITY_VALUES", joinColumns = @JoinColumn(name = "entity_id"))
    @Column(name = "DOUBLE_VALUES")
    private Map<String, Double> doubleValues;
    

    【讨论】:

      【解决方案2】:

      单词“values”是 SQL 保留关键字,不能将其用作 SQL 中的标识符。如果您尝试将某些东西命名为“索引”,则会出现同样的情况。如果您将名称更改为其他名称,它应该可以工作。

      你知道的:

      insert into table values (...)
      

      由于使用了其他关键字,我过去在自动生成代码时也遇到过类似的问题。

      顺便说一句,过去我用 Hibernate 3.6.2 和地图集合试验了几个问题。您可能喜欢take a look a this answer,因为您似乎正朝着同样的方向前进。

      希望对你有帮助!

      【讨论】:

      • 实际上我的字段名称不同。该错误与字段名称完全无关。对困惑感到抱歉;我会修改问题。
      猜你喜欢
      • 2011-10-20
      • 2010-10-25
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多