如何获取用户A与用户B、C和D进行对话的用户对话列表



我使用的是Spring Data JPA,但我一直纠结于如何根据用户的聊天历史创建查询。

我有两个对象,其中Message是一个实体,而Chat Message不是。

您可以从这两个类中查看,并指导我如何创建spring数据JPA查询,该查询查询某些用户与其他用户的对话:

@Entity 
public class Message {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
Long id;
String message;
@ManyToOne
@JoinColumn(name="fromUser",nullable=false)
private User fromUser;
@ManyToOne
@JoinColumn(name="toUser",nullable=false)
private User toUser;

public Message() { }

public Message(User fromUser, User toUser, String message) {
this.fromUser=fromUser;
this.toUser=toUser;
this.message=message;
}
public Long getId() {
return id;
}

// getters and setters

}
public class ChatMessage {
Long id;
String message;
String sender;
String username;
Long  senderId;

public ChatMessage() { }

// getters and setters
public ChatMessage(Message m, Boolean isReply) {
this.sender = m.getFromUser().getFirstname() + " " + m.getFromUser().getLastname();
this.message = m.getMessage();
this.senderId = m.getFromUser().getId();
this.id = m.getId();
}

}

我可能的终点:

@RequestMapping(value="/conversations",produces = "application/json")
@ResponseBody
public List<Message>  myMessages(Principal principal){

String thisUser=principal.getName();
User user=userServiceImpl.findByUsername(thisUser);
// List<Message>messages=messageServiceImpl.finddAll();
List<Message> messages=messageServiceImpl.fetchMessages(user.getId());
return messages;
}

请注意,ChatMessage只是一个用于承载WebSocket消息的对象类。我的消息回购:

public interface MessageRepository extends JpaRepository<Message,Long>{
}

图片:[1]:https://i.stack.imgur.com/hVbP3.png

这里还不清楚您到底需要什么,例如messageServiceImpl做什么。但是,也许这将是有用的:


public interface MessageRepository extends JpaRepository<Message, Long> {
// if we get all messages your user sent or received - would it be
// what you mean here a "conversation" ?
List<Message> findByFromUserIdOrToUserId(Long id);

// or you can use @Query to achieve the same
@Query("select m from Message m where m.fromUser.id = :id or m.toUser.id = :id")
List<User> findMessagesForUser(Long id);
}

您还可以在他们的官方文档中找到有关如何使用SpringData创建查询的更多详细信息。

最新更新