Java 将子对象保存到数据库后,如何同步实体?

Java 将子对象保存到数据库后,如何同步实体?,java,hibernate,spring-data,spring-data-jpa,Java,Hibernate,Spring Data,Spring Data Jpa,我有一个在用户登录期间从数据库加载的用户对象。此用户与消息实体具有OneToMany关系(messageList)。当另一个用户向该用户发送新消息时,该消息存储在数据库中。在这之后,我需要让登录用户的messageList自动与数据库同步。换句话说,新消息需要出现在接收用户的messageList列表中 有没有一种Spring数据方法可以实现这一点?我不希望在保存消息后刷新整个userEntity。(使用entitymanager.refresh()),因为仅仅为了同步messageList而检

我有一个在用户登录期间从数据库加载的用户对象。此用户与消息实体具有OneToMany关系(messageList)。当另一个用户向该用户发送新消息时,该消息存储在数据库中。在这之后,我需要让登录用户的messageList自动与数据库同步。换句话说,新消息需要出现在接收用户的messageList列表中

有没有一种Spring数据方法可以实现这一点?我不希望在保存消息后刷新整个userEntity。(使用entitymanager.refresh()),因为仅仅为了同步messageList而检索userEntity中的所有子对象似乎有些过分

我可以将新消息添加到userEntity,然后保存userEntity,但有时同一消息会发送给多个用户,我不想为了保存消息而检索所有用户对象

我目前的解决方案是创建一个SpringAspectJ侦听器方法,它侦听保存消息的所有方法。当发生这种情况时,save消息会手动添加到相关的用户实体messageList中。你可能会问,为什么要这么努力?因为我希望消息自动出现在前端(我使用的是Angular 4框架)。Angular 4侦听数据模型中的更改

但在实现此解决方案之前,我想知道是否有更简单的方法来实现messagelist同步


谢谢。

< P>我认为主要的问题是你认为<代码>消息>代码>是代码>用户< /代码>的一部分。从您的描述来看,
用户
似乎或多或少包含静态信息,而
消息
则经常出现

因此,我建议将域模型更改为将
Message
作为一个单独的聚合根,并拥有自己的存储库。存储库可能应该有一种方法来获取
用户的所有
消息
,也可能有另一种方法来获取
用户
在某个时间戳后发生的所有消息,或者使用不同的
消息
仅获取新的
消息


另一个问题是,你是否使用了正确的技术来完成这项工作。通过关系数据库分发事件是可能的,但它们并不是为此而构建的。您可能需要考虑诸如内存存储(例如HAZELCAST)或专用消息解决方案(例如RabByMQ)之类的备选方案。请注意,
消息
s仍然可以(也可能应该)保存在持久存储中,但不能使用该存储来分发它。

我必须使用WebSocket才能实现我想要的。因为我在我的项目中使用了Spring,所以我将使用Spring websocket模块来实现这一点。

用户不仅仅是静态信息,而且消息已经有了自己的存储库,谢谢您提供的信息。RabbitMQ看起来很有趣:)