2015-04-21 38 views
0

映射到数据库在我正在开发的项目中,使用JPA将(哈希)映射映射到数据库似乎存在问题。Java Map <Entity1,Entity2>使用JPA

该映射(在'Race'实体内命名为'racers')由键值对< User,Racestats>,这两个JEE中的自定义实体组成。

该地图由“@ElementCollection”注解。

当试图将映射持久化到数据库时,会给出错误:“数据截断:数据过长而导致'RACERS'列'”。

当检查数据库时,我们看到一个表'Race_RACERS'被创建,它由三列组成:两个bigint(表示Race对象和User对象的id)和一个varchar,它包含Racestats对象。

当然,最后一列还应包含对Racestats的引用,而不是嵌入这些Racestats对象。

我们已经尝试使用其他注释修复问题,但它们都不起作用。

任何人都可以请给我们提供正确的语法来坚持我们的对象。

键在每个地图中显然是唯一的,但在不同的Race对象中,地图可以包含相同的键。

没有2的值永远是相同的。即使在不同的Race对象中,地图也不会包含相同的值。

回答

0

我不知道所有关于您的使用情况的信息,但它看起来对我来说,这将是简单的把Racestats实体内的用户参考,如:

@Entity 
public class Race { 
    @OneToMany(mappedBy="race") 
    Set<Racestats> racestats; 
} 

@Entity 
public class Racestats { 
    @ManyToOne 
    User user; 

    @ManyToOne 
    Race race; 

    // Other race stats fields 
    ... 
} 
+0

应该是可能的获取某个用户的RaceStat。如果按照您的建议实施,我们必须遍历所有RaceStats以找出哪一个属于正确的用户。这对我来说似乎并不理想...... –

+0

您是否知道在保持User-RaceStats-Map的同时解决我的问题的正确方法?当简单地给Map一个OneToMany注解时,我们得到了EclipseLink异常:“表[RACESTATS]不存在于这个描述符中。”和“必须为序号字段定义非只读映射”。 –

+0

对不起,如果我不回答你的问题,但我没有看到一种方法来使用实体的地图。该映射在java中可能是一个很好的构造,但它不是用JPA将实体映射到数据库的标准方法。 –

相关问题