gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:25:31 27 4
gpt4 key购买 nike

我使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com