java - 我不明白如何使用@MapKey

标签 java hibernate

我使用 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;
        }

我看了很多文档,但我看不懂@MapKey

name = "type"是什么意思?为什么是"type"?我可以在哪个类(class)查看它? 我在哪里可以找到 mappedBy = "player"

最佳答案

mappedBy='player' 引用 Stat 类的 player 属性 - 它是关系的拥有方。

name = "type" 引用同一个 Stat 类的 type 属性 - 它表示 >Map 映射到不同类型的 Stat

编辑:注释中的值与表列名称不对应可能会令人困惑。列名称默认为字段名称,但在您的实体中,使用 @Column 注释来覆盖列名称

Hibernate 和 JPA 使用字段名称作为关系注释,而不是列名称,除非另有指定(例如 JoinColumn 等)。

要记住的一个很好的启发式是 - 当注释中没有“列”时,您可以假设涉及字段名称。我不确定它是否100%适用,但在大多数情况下确实如此。

关于java - 我不明白如何使用@MapKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16232272/

相关文章:

java - 捕获事务方法内的异常后超出锁等待超时

Java Swing - 如何分离 UI 组件

java - 导航回 FragmentPagerAdapter,listFragment 为空

java - hibernate 没有获取序列的 next_val

java - Hibernate:通过反射持久属性访问字段 [private java.lang.Integer] 时出错

java - 一对多 order by 与案例 hibernate spring

java - 在 Spring Data JPA 存储库方法中返回 Stream 时出现 UnsupportedOperationException

java - 使用附加参数重写无状态 Spring 服务中的方法

java在第二类中找不到构造函数

java - 如何设置 RestTemplate 以重试对某些响应状态代码的调用?