我已经将应用程序从完整的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,
答案 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;
然后将您的设置转换为地图计算。