play-framework 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))
;
2 つのテーブルが作成されないのはなぜですか? 何らかの方法で多対多の関係に名前を付ける必要がありますか?
注釈でテーブルに名前を付ける方法を検索しようとしましたが、解決策が見つかりませんでした。