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

该地图(在实体“种族”内称为“赛车手”)由键值对组成,这两个都是JEE中的自定义实体。

该地图由“ @ElementCollection”注释。

尝试将映射持久化到数据库时,出现错误:“数据截断:数据对于“ RACERS”列而言太长”。

检查数据库时,我们看到创建了一个“ Race_RACERS”表,该表由三列组成:两个bigints(代表Race对象和User对象的ID)和一个varchar,其中包含Racestats对象。

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

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

任何人都可以为我们提供正确的语法来持久化对象。

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

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

最佳答案

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

09-05 20:52