私の要件はかなりに簡単あるとして、私はその管理者による管理パネルをしたユーザーとメッセージエンティティ関係があり、システムのすべての登録ユーザーにメッセージを送信します。希望
@Entity
public class Message implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String message;
@Temporal(TemporalType.TIMESTAMP)
private Date sentDate;
@ManyToMany(mappedBy = "messages", cascade = {CascadeType.MERGE})
private List<User> users;
// setter - getters methods are omitted
}
システムに新しいユーザーのサインアップ、彼は唯一の管理者は、彼のサインアップ時間の後に送信されたメッセージを送って見るべきことを私はしたい。この時点で
@Entity
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long userId;
private String userName;
@Temporal(TemporalType.TIMESTAMP)
private Date userJoinedAt;
@ManyToMany(cascade = { CascadeType.PERSIST })
@JoinTable
private List<Message> messages;
// setter - getters methods are omitted
}
:
と。私が試した:
public void addMessage(Message message) throws Exception {
message.setMessageSentDate(new Date());
messageService.save(message);
List<Message> messages = messageService.getAll();
List<User> registeredUsers = userService.getAll();
for (User user : registeredUsers) {
for (Message savedMessage : messages) {
if(user.getUserJoinedAt().before(savedMessage.getMessageSentDate())){
user.setMessages(messages);
userService.save(user);
}
}
}
}
しかし、この方法は、必要に応じて、それはそれらがユーザー入社日前に送信された場合でも、メッセージエンティティ内のすべてのメッセージ存在が追加されます意味機能していません。
どのようにして希望の仕事を得ることができますか?
UPDATE public void addMessage(Message message) throws Exception {
message.setMessageSentDate(new Date());
messageService.save(message);
List<Message> messages = messageService.getAll();
List<User> registeredUsers = userService.getAll();
for (User user : registeredUsers) {
// Initializing new variable to store afterJoinedMessages
List<Message> afterJoinedMessages = new CopyOnWriteArrayList<Message>();
for (Message savedMessage : messages) {
if(user.getUserJoinedAt().before(savedMessage.getMessageSentDate())){
// Here adding those messages to afterJoinedMessages List
afterJoinedMessags.add(savedMessage);
// and saving those to user
user.setMessages(afterJoinedMessags);
userService.save(user);
}
}
}
}
が、これはより良い解決策または回答に記載されているものであろうか?
public void addMessage(Message message) throws Exception {
message.setMessageSentDate(new Date());
messageService.save(message);
List<Message> messages = messageService.getAll();
List<User> registeredUsers = userService.getAll();
for (User user : registeredUsers) {
// Initializing new variable to store afterJoinedMessages
List<Message> afterJoinedMessages = new CopyOnWriteArrayList<Message>();
for (Message savedMessage : messages) {
if(user.getUserJoinedAt().before(savedMessage.getMessageSentDate())){
// Here adding those messages to afterJoinedMessages List
afterJoinedMessags.add(savedMessage);
// and saving those to user
user.setMessages(afterJoinedMessags);
userService.save(user);
}
}
}
}
ご質問ありがとうございます。私の質問で_UPDATE_を見て、正しい解決策をお教えください。 –
は別の方法で更新されました – richardtz
これは本当にうれしいです_update_魅力のように働くので、幸せ、ありがとうございます。 –