Java Map <entity1,entity2 =“”>使用JPA </entity1,>映射到数据库

时间:2015-04-21 22:20:39

标签: java mysql java-ee jpa

在我正在进行的项目中,使用JPA将(Hash)Map映射到数据库似乎存在问题。

地图(名为'racers',在实体'Race'中)由键值对&lt;用户,Racestats&gt;,JEE中的两个自定义实体。

地图由“@ElementCollection”注释。

当尝试将地图持久保存到数据库时,会出现错误:“数据截断:列'RACERS'的数据太长了。”

检查数据库时,我们看到创建了一个表'Race_RACERS',它包含三列:两个bigints(表示Race对象和User对象的id)和一个包含Racestats对象的varchar。 / p>

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

我们已经尝试使用其他几个注释解决问题,但它们似乎都不起作用。

任何人都可以向我们提供正确的语法来保留我们的对象。

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

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

1 个答案:

答案 0 :(得分:0)

我没有关于您的用例的所有信息,但在我看来,将User引用放在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
    ...
}