在我正在进行的项目中,使用JPA将(Hash)Map映射到数据库似乎存在问题。
地图(名为'racers',在实体'Race'中)由键值对<用户,Racestats>,JEE中的两个自定义实体。
地图由“@ElementCollection”注释。
当尝试将地图持久保存到数据库时,会出现错误:“数据截断:列'RACERS'的数据太长了。”
检查数据库时,我们看到创建了一个表'Race_RACERS',它包含三列:两个bigints(表示Race对象和User对象的id)和一个包含Racestats对象的varchar。 / p>
当然,最后一列还应该包含对Racestats的引用,而不是嵌入这些Racestats对象。
我们已经尝试使用其他几个注释解决问题,但它们似乎都不起作用。
任何人都可以向我们提供正确的语法来保留我们的对象。
键在每个地图中显然都是唯一的,但在不同的Race对象中,地图可以包含相同的键。
没有2个值将是相同的。即使在不同的Race对象中,地图也不会包含相同的值。
答案 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
...
}