2014-01-12 58 views
0

如何在實體類中註釋一個Map,其中鍵是實體類,併爲實體類中的常量java對象(在我的情況下爲布爾值)賦值?在Hibernate中註釋一個地圖

我有兩個@Entity類:Voter和Poll。 在民意調查班,我想保留一個地圖<選民布爾>的投票可以投票在這個民意測驗。布爾標記選民是否投了票。因此,映射在選民投票中是多對多的。

我有類:

@Enity 
public class Voter { 
    ...some attributes and their getters and setters 
    private List<Poll> polls; 
    private int voterId; 

    @Id 
    public int getVoterId() { 
     return voterId; 
    } 

    @ManyToMany(mappedBy="voters") 
    public List<Poll> getPolls() { 
     return polls; 
    } 
    ..and setter. 
} 

@Enity 
public class Poll { 
    ...some attributes and their getters and setters 
    private Map<Voter,Boolean> voters; 

    @ManyToMany 
    @JoinColumn(referencedColumnName="voterId") 
    public Map<Voter,Boolean> getVoters() { 
     return voters; 
    } 
    ..and setter. 
} 

這種運行時,未能引起AnnotationException。 我已經看到註解@MapKeyJoinColumn的使用,並嘗試了它(@JoinColumn的instaed),並失敗。我還沒有找到像這樣的一個例子(地圖的一個實體的關鍵,地圖的價值只是一個對象),所以我基本上使用了嘗試失敗的方式。

所以問題是:我應該把什麼註釋放在哪裏?

+0

我想,你遇到的一個問題是,你在選民類中的@ManyToMany註解指的是Poll.voters字段作爲該關聯的另一端,這不可能是真實的,因爲選民不是真正的領域類型選民。將地圖重命名爲其他名稱,應該修復此錯誤。但是,這並不能解決你的地圖問題。 –

回答

0

對於值爲基本類型(或Embeddable類型)的地圖,例如Boolean,則需要使用@ElementCollection annotation。 JPA將爲Map創建一個連接表。

但是,您不能在Voter類中使用@ManyToMany帶註釋的屬性來引用此收集表。爲此,您可以在Poll類中添加另一個CollectionVoter實體。

如果您有一個實體作爲值類型,則可以使用@OneToMany@ManyToMany註釋。不幸的是,這不適用於你的情況。