在Hibernate中注释一个Map

时间:2014-01-12 14:37:43

标签: java hibernate map boolean

如何在实体类中注释键是实体类的Map和值普通的java Objects(在我的例子中是布尔值)?

我有两个@Entity课程:选民和民意调查。 在Poll课程中,我想保留一个Map<选民,布尔>可以投票的选民投票。布尔值表示投票者是否已投票。因此,在民意调查中,映射是多对多的。

我有课程:

@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),并且失败了。我还没有找到像这样的例子(映射实体的关键,map只是一个对象的值),所以我基本上使用了try-fail方式。

所以问题是:我应该把注释放在哪里?

1 个答案:

答案 0 :(得分:0)

对于值为基本类型(或Embeddable类型)的地图,例如Boolean,您需要使用@ElementCollection annotation。 JPA将为Map创建一个连接表。

但是,您无法在@ManyToMany类中使用Voter带注释的属性引用此集合表。为此,您可以在Collection类中添加另外VoterPoll个实体。

如果您有一个实体作为值类型,则可以使用@OneToMany@ManyToMany注释。不幸的是,这不适用于您的情况。