我在播放框架Web应用程序中实现投票功能时遇到了一些麻烦。
目前我已经在课程中定义了这些变量,这些变量应该具有“得分”票数。
@ManyToMany(cascade=CascadeType.REMOVE)
public List<User> upVotes = new ArrayList<User>();
@ManyToMany(cascade=CascadeType.REMOVE)
public List<User> downVotes = new ArrayList<User>();
在同一课程中,我还实施了一些方法,以便用户可以切换投票。
public void toggleUpVote(User user){
if(user == null){
// Do nothing
Logger.debug("Vote: User is null!");
}
else if(upVotes.contains(user)){
Logger.debug("Vote: removed upvote!");
upVotes.remove(user);
this.saveManyToManyAssociations("upVotes");
} else {
if(downVotes.contains(user)){
Logger.debug("Vote: removed old downvote!");
downVotes.remove(user);
this.saveManyToManyAssociations("downVotes");
}
Logger.debug("Vote: Added upvote!");
upVotes.add(user);
this.saveManyToManyAssociations("upVotes");
}
Logger.debug("Uservotestatus: " + getVoteStatus(user));
this.save();
}
public void toggleDownVote(User user){
if(user == null){
// Do nothing
Logger.debug("Vote: User is null!");
} else if(downVotes.contains(user)){
Logger.debug("Vote: removed downvote!");
downVotes.remove(user);
this.saveManyToManyAssociations("downVotes");
} else {
if(upVotes.contains(user)){
Logger.debug("Vote: removed old upvote!");
upVotes.remove(user);
this.saveManyToManyAssociations("upVotes");
}
Logger.debug("Vote: Added downvote!");
downVotes.add(user);
this.saveManyToManyAssociations("downVotes");
}
Logger.debug("Uservotestatus: " + getVoteStatus(user));
this.save();
}
public int getVoteStatus(User user){
if(upVotes.contains(user)){
return 1;
} else if (downVotes.contains(user)) {
return -1;
} else {
return 0;
}
}
public int getScore(){
Logger.debug("upVotes: " + upVotes.size());
Logger.debug("downVotes: " + downVotes.size());
Logger.debug("upvotes: "+ upVotes + "downvotes:" + downVotes);
return (upVotes.size() - downVotes.size());
似乎每当我将用户添加到upVotes列表时,它也会被添加到downVotes列表中。投票功能似乎工作得很好,我也测试了模型,以确保一切正常。 (测试工作正常并且没有问题)我偷偷摸摸地进入创建表的sql文件,并且只能找到这个ManyToMany关系:
create table note_user (
note_id bigint not null,
user_id varchar(255) not null,
constraint pk_note_user primary key (note_id, user_id))
;
为什么不创建两个表?我是否必须以某种方式命名多对多关系?
我已经尝试过通过注释搜索表格的方法,但没有找到任何解决方案。
答案 0 :(得分:1)
我能够通过使用jointable注释来解决这个问题。
@ManyToMany(cascade=CascadeType.REMOVE)
@JoinTable(name="up_votes")
public List<User> upVotes = new ArrayList<User>();
@ManyToMany(cascade=CascadeType.REMOVE)
@JoinTable(name="down_votes")
public List<User> downVotes = new ArrayList<User>();
数据库中的结果如下:
create table up_votes (
note_id bigint not null,
user_id varchar(255) not null,
constraint pk_up_votes primary key (note_id, user_id))
;
create table down_votes (
note_id bigint not null,
user_id varchar(255) not null,
constraint pk_down_votes primary key (note_id, user_id))
;