Java 休眠将消息标记为“已读”

Java 休眠将消息标记为“已读”,java,sql,json,hibernate,Java,Sql,Json,Hibernate,我的应用程序有一条“已读”或“未读”的实体消息 客户端可以请求已读或未读的消息,或者在其他条件中同时请求这两种消息。我要做的是将结果集的一些属性作为JSON对象返回,如果此结果集中有未读消息,则将它们标记为已读并将其状态持久化到数据库 简单地说,我们可以先迭代结果集并提取所需的数据,然后重复相同的结果集并更新必要的消息 但这是最佳方式吗?我们不能使用sql触发器或一些hibernate特性吗 使用另一个Update语句更新记录。 创建用于获取数据的存储过程。 JPA规范包含@PostLoad注释

我的应用程序有一条“已读”或“未读”的实体消息

客户端可以请求已读或未读的消息,或者在其他条件中同时请求这两种消息。我要做的是将结果集的一些属性作为JSON对象返回,如果此结果集中有未读消息,则将它们标记为已读并将其状态持久化到数据库

简单地说,我们可以先迭代结果集并提取所需的数据,然后重复相同的结果集并更新必要的消息

但这是最佳方式吗?我们不能使用sql触发器或一些hibernate特性吗

使用另一个Update语句更新记录。 创建用于获取数据的存储过程。 JPA规范包含@PostLoad注释,您可以阅读它。但我会非常小心,因为hibernate可以随时在消息实体上发布load,您的团队中的其他人调用load,并且您的记录被破坏了。
您必须选择使用SQL,您可以选择消息并在与hibernate HQL类似的where子句中过滤掉它们,或者您可以使用hibernate/JPA criteria API。@Joe感谢您的回答,我熟悉标准查询语言和hibernate查询语言。我可以使用这两种方法来过滤我想要的结果。我想要的是有一种机制,可以在我提取信息后自动标记所选的未读邮件。我想说的是,您必须从messages表中对所需记录发出更新。当然,我可以对结果集中的记录调用SQL UPDATE,但我希望这是自动完成的,这意味着,我想知道调用SQL SELECT生成的结果集是否可以自动调用SQL UPDATE…据我所知,并没有比选择前/后触发器更好的了。你们唯一能做的就是创建存储过程来获取数据,并在这个过程中更新记录,但我认为这是肮脏的黑客行为。