Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我不明白如何使用@MapKey_Java_Hibernate - Fatal编程技术网

Java 我不明白如何使用@MapKey

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;

我使用hibernate注释我有这个源代码

     @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-这似乎是一个误解-我添加了一些更多的信息来澄清,请参见编辑。