在我正在研究的项目中,使用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
...
}