Meine Forderungen gewünscht ist ganz einfach , ich Admin-Panel habe durch die Admin-Nachrichten an alle registrierten Benutzer des Systems sendet, Benutzer und Message Entity Beziehung ist:Wie diese Messaging-System Arbeit machen, wie
@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
}
Und:
@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
}
an dieser Stelle möchte ich, dass, wenn ein neuer Benutzer Zeichen-up im System sollte er nur die Admin-Nachrichten gesendet sehen, die nach seiner Anmelde-Zeit gesendet werden. Ich habe versucht:
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);
}
}
}
}
Aber diese Methode funktioniert nicht wie gewünscht, bedeutet das, alle Nachrichten in Nachrichten Entity fügt hinzu, auch wenn diese vor User Anmeldedatum gesendet werden.
Wie kann ich das machen, um den gewünschten Job zu bekommen?
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);
}
}
}
}
Wäre dies eine bessere Lösung oder diejenige sein, die in Antwort gegeben wird?
Vielen Dank für Ihre Zeit, bitte sehen Sie die _UPDATE_ in meiner Frage und schlagen Sie mir die richtige Lösung! –
mit einem anderen Ansatz aktualisiert – richardtz
Das ist genial wirklich froh, dass diese _update_ funktioniert wie Charme, So glücklich, übrigens vielen Dank! –