如何在实体类中注释键是实体类的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方式。
所以问题是:我应该把注释放在哪里?
答案 0 :(得分:0)
对于值为基本类型(或Embeddable
类型)的地图,例如Boolean
,您需要使用@ElementCollection
annotation。 JPA将为Map
创建一个连接表。
但是,您无法在@ManyToMany
类中使用Voter
带注释的属性引用此集合表。为此,您可以在Collection
类中添加另外Voter
个Poll
个实体。
如果您有一个实体作为值类型,则可以使用@OneToMany
和@ManyToMany
注释。不幸的是,这不适用于您的情况。