2013-04-26 102 views
1

我使用註釋冬眠我有thise源我不知道如何使用@MapKey

 @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"?我可以查看它的課程? 我在哪裏可以找到mappedBy = "player"

回答

1

mappedBy='player'player屬性FO的Stat類 - 它是關係的持有端。

name = "type"指同一Stat類的type屬性 - 它說的是,在Map的值被映射到不同類型的Stat

編輯:註釋中的值與表列名稱不一致可能會引起混淆。列名默認爲字段名,但在你的實體的列名被覆蓋,使用@Column註釋

Hibernate和JPA的關係註釋,不列名,當另有規定除外(如JoinColumn等)使用的字段名。

要記住的一個好的啓發是 - 當註釋中沒有'列'時,可以假定字段名稱是關心的。我不確定它是否適用於100%,但在大多數情況下它確實適用。

+0

我展示了類Stat,因爲在註釋 - 類Stat中缺少「type」和「player」。class Stat有「stat_type」(int類型)和「player_id」(類型PPlayer),或者我不明白? – 2013-04-26 09:16:16

+0

@MaxUsanin - 這似乎是一個誤解 - 我已經添加了一些更多的信息來澄清,請參閱編輯。 – kostja 2013-04-26 09:26:16

+0

是的,謝謝,你已澄清 – 2013-04-26 09:29:40

-4

您可以查找MapKey的JavaDoc。

+0

對不起,但這個鏈接不告訴我任何東西 – 2013-04-26 09:01:44

+1

-1來吧,爲什麼不建議使用谷歌以及?這不是真的有幫助 – kostja 2013-04-26 09:08:01