Java 我不明白如何使用@MapKey
我使用hibernate注释我有这个源代码Java 我不明白如何使用@MapKey,java,hibernate,Java,Hibernate,我使用hibernate注释我有这个源代码 @Table(name = "stats") public class Stat { @Id @GeneratedValue(generator = "increment") @GenericGenerator(name = "increment", strategy = "increment") private long id;
@Table(name = "stats")
public class Stat {
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
private long id;
@ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY)
@JoinColumn(name = "player_id")
private PPlayer player;
@Column(name = "stat_type")
private int type;
@Column(name = "stat_value")
private int value;
}
@Entity
@Table(name = "Users")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class PPlayer {
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
@Column(name = "user_id")
private long id;
private String username;
private String email;
private Date joiningDate;
private String key;
private String password;
private int rank;
private int score;
@OneToMany(mappedBy = "player", cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
@MapKey(name = "type")
private Map<Integer, Stat> stats;
}
@Table(name=“stats”)
公共类统计{
@身份证
@生成值(生成器=“增量”)
@GenericGenerator(name=“increment”,strategy=“increment”)
私人长id;
@manytone(cascade={CascadeType.REFRESH},fetch=FetchType.LAZY)
@JoinColumn(name=“player\u id”)
私人玩家;
@列(name=“stat\u type”)
私有int型;
@列(name=“stat\u value”)
私有int值;
}
@实体
@表(name=“Users”)
@继承(策略=InheritanceType.SINGLE_表)
公共类PPlayer{
@身份证
@生成值(生成器=“增量”)
@GenericGenerator(name=“increment”,strategy=“increment”)
@列(name=“user\u id”)
私人长id;
私有字符串用户名;
私人字符串电子邮件;
私人日期合并日期;
私钥;
私有字符串密码;
私有整数秩;
个人智力得分;
@OneToMany(mappedBy=“player”,cascade={CascadeType.ALL},fetch=FetchType.LAZY)
@映射键(name=“type”)
私人地图统计;
}
我看了很多文档,但看不懂@MapKey
什么是name=“type”?
为什么“type”
?我可以在哪个类中查看它?
我可以在哪里找到
mappedBy=“player”
?您可以查找的JavaDoc。您是否尝试过使用以下hibernate手册:
尽管上述手册使用地图集合处理XML ORM映射,基本原理与Hibernate中带注释的
@MapKey
用法基本相同。mappedBy='player'指的是Stat
类的player
属性-它是关系的拥有方
name=“type”
是指同一Stat
类的type
属性-它表示Map
中的值映射到不同类型的Stat
编辑:注释中的值与表列名不对应可能会造成混淆。列名默认为字段名,但在实体中,列名将使用@Column
注释被覆盖
Hibernate和JPA对关系注释使用字段名,而不是列名,除非另有规定(如JoinColumn
等)
要记住的一个很好的启发是——当注释中没有“列”时,可以假设与字段名有关。我不确定它是否100%适用,但在大多数情况下它确实适用。对不起,这个链接没有告诉我任何事情-1拜托,为什么不建议也使用谷歌?这并没有真正的帮助,因为在注释中,class Stat中缺少“type”和“player”。。类统计有“统计类型”(类型int)和“玩家id”(类型PPlayer)或者我不明白?@MaxUsanin-这似乎是一个误解-我添加了一些更多的信息来澄清,请参见编辑。