Java 再说一遍:如何解决';集合';映射中的重复列;?

Java 再说一遍:如何解决';集合';映射中的重复列;?,java,hibernate,jpa,entity,Java,Hibernate,Jpa,Entity,我试图在entityPlayer中使用HashMap,我的HashMap是Integer和另一个一对多关系中的实体(entityResourceOnPlayerAccount)的组合,因此我可以防止重复条目,但仍然可以保留最新条目。我的代码与哈希集配合得很好,但这样我就无法保留最新的条目 我已经在找另一个帖子了。在这些帖子中,我找到了这个 但在这篇文章中,问题似乎是一个列的重复调用,但在我的代码中,我找不到类似的东西。而且我也找不到一个带有HashMap的示例 我添加了播放器实体,如下所示: P

我试图在entity
Player
中使用
HashMap
,我的
HashMap
Integer
和另一个一对多关系中的实体(entity
ResourceOnPlayerAccount
)的组合,因此我可以防止重复条目,但仍然可以保留最新条目。我的代码与
哈希集
配合得很好,但这样我就无法保留最新的条目

我已经在找另一个帖子了。在这些帖子中,我找到了这个 但在这篇文章中,问题似乎是一个列的重复调用,但在我的代码中,我找不到类似的东西。而且我也找不到一个带有
HashMap
的示例

我添加了播放器实体,如下所示:

Player.java

@Entity
@Table(name="player")
public class Player {

    // define fields

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="user_name")
    private String userName;

    @Column(name="password")
    private String password;

    @Column(name="display_name")
    private String displayName;

    @Column(name="email")
    private String email;

    // define relationships

//    @OneToMany(cascade = CascadeType.ALL)
//    @JoinColumn(name = "player_id")
//    private Set<ResourceOnPlayerAccount> resourceOnPlayerAccountSet;

    @OneToMany
    @MapKeyColumn(name = "player_id")
    private Map<Integer, ResourceOnPlayerAccount> resourceOnPlayerAccountMap;
...
@Entity
@Table(name = "resources_on_player_account")
public class ResourceOnPlayerAccount {

    // define fields

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "amount")
    private double amount;

    @Column(name = "resource_id")
    private int resourceId;
...

我只想确保玩家的帐户中没有重复的资源,并且可以更新现有的资源量。

@MapKeyColumn
用于
地图
情况

在您的例子中,它是
Map
。为此
@MapKey
使用:

指定类型为java.util.map的关联的映射键 映射键本身是的主键或持久字段或属性 作为映射值的实体


我更改了注释。现在,我收到以下错误消息:
未找到映射键属性:com.avanoah.projectf.springdemo.projectfwebversion.entity.ResourceOnPlayerAccount.player\u id
它应该是持久字段的名称,而不是db列。playerId或者你在实体中称之为的任何东西。哦,好的。我没有将数据库中的player_id列添加到
ResourceOnPlayerAccount
实体中。但我现在做了,并将
@MapKey(name=“player\u id)
更改为
@MapKey(name=“playerId)
。但收到以下错误消息:
架构验证:缺少表[player\u resource\u on\u player\u account\u map]
。如果你愿意,我可以编辑我的帖子并添加更新的代码。很可能你在网上找不到mappedBy。谢谢!就这样。知道它是编译的。我现在只需要检查一下,随着资源的更新,它是否可以正常工作。:)