如何配置Element-collection以映射JPA orm.xml配置中的现有DB表?

时间:2011-09-29 13:55:21

标签: hibernate orm collections mapping jpa-2.0

我已经将应用程序从完整的Hibernate特色文件迁移到基于JPA / Hibernate的应用程序,我的JPA映射存在问题。

我们设法使用orm.xml来映射我们的实体。一切都很好,直到我不得不处理元素集合。 实际上,我有一个名为用户的实体,它有一个嵌入式地图(地图集合称为首选项)。所以我们有类似的东西:

public class User {
        private Long id;
        private Map<String, String> preferences;
}

在我们的全休眠版本中,会生成PREFERENCE(ID,name,value)表。但是当我们尝试将其迁移到JPA时,我们使用了以下映射:

<element-collection name="preferences" target-class="java.lang.String" fetch="LAZY">
       <map-key-class class="java.lang.String" />
       <map-key-column name="[name]" />
       <column name="[value]" />
       <collection-table name="PREFERENCE">
           <join-column name="ID" />
       </collection-table>
</element-collection>

生成一个新的 User_Preferences 表。即使我在xml配置中指定了 name ='PREFERENCES'属性,我也无法将元素集合指向现有的表PREFERENCES

您是否曾经历过这种情况? 任何帮助都会非常感激。

非常感谢guyz,

2 个答案:

答案 0 :(得分:9)

看起来像个错误。我不能指出你的映射有什么问题,我尝试使用EclipseLink 2.3.0和这样的映射创建了一个名为PREFERENCE的表。还试用了Hibernate 3.5.6,表格的名称是USER_PREFERENCES,如你所说。

看起来他们只是丢弃了集合表的名称。但与注释相同的工作正常:

@ElementCollection(targetClass = java.lang.String.class)
@MapKeyClass(java.lang.String.class)
@MapKeyColumn(name="name")
@CollectionTable(name = "PREFERENCE", joinColumns = @JoinColumn(name="ID"))
@Column(name="value")

答案 1 :(得分:0)

你试过这个结构吗?

Set<Preference> preferences;

然后将您的设置转换为地图计算。