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

kaf*_*ein 3 mapping collections orm hibernate jpa-2.0

我已经将一个应用程序从完整的Hibernate功能迁移到基于JPA/Hibernate的应用程序,我的JPA映射存在问题.

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

public class User {
        private Long id;
        private Map<String, String> preferences;
}
Run Code Online (Sandbox Code Playgroud)

在我们的完全休眠版本中,会生成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>
Run Code Online (Sandbox Code Playgroud)

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

你有过这种情况吗?真的很感激任何帮助.

非常感谢guyz,

Mik*_*unu 9

看起来像个bug.我不能指出你的映射有什么问题,我尝试使用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")
Run Code Online (Sandbox Code Playgroud)