Java Hibernate不可变实体和脏检查机制REST web app

Java Hibernate不可变实体和脏检查机制REST web app,java,hibernate,rest,Java,Hibernate,Rest,这是我使用ORM(本例中为Hibernate)时的第一个项目。实际上我有一个不可变的实体,它意味着什么: 我直接将实体提取到DTO中(使用查询/投影/元组)。 使用UPDATE子句将接收到的DTO映射到DB中。因此,Hibernate通常不管理任何实体。更新时的另一种方法是获取实体,然后使用setter和commit更改其参数。实际上,每个POST/UPDATE请求都执行SQL查询,这是好的还是坏的做法?我应该如何使用Hibernate?可以这样做。但您必须记住,hibernate加载的实体不是

这是我使用ORM(本例中为Hibernate)时的第一个项目。实际上我有一个不可变的实体,它意味着什么: 我直接将实体提取到DTO中(使用查询/投影/元组)。
使用UPDATE子句将接收到的DTO映射到DB中。因此,Hibernate通常不管理任何实体。更新时的另一种方法是获取实体,然后使用setter和commit更改其参数。实际上,每个POST/UPDATE请求都执行SQL查询,这是好的还是坏的做法?我应该如何使用Hibernate?

可以这样做。但您必须记住,hibernate加载的实体不是您的类,而是可能存在延迟加载问题的代理 (例如,在关闭该会话之前,必须确保所有数据都已正确序列化)

有一些古老的读物(但仍然正确):


使用直接发布的查询更新数据将比加载然后保存更新实体提供更高的性能,那么为什么人们要使用hibernate的管理上下文呢?它可能有延迟加载问题,而且性能更差。我知道这是一个有点不同的问题,但如果您能回答,通过setter管理实体状态有什么好处,我认为这比编写查询更舒服。关于性能,还有一件事,让20个实体保持托管状态,然后在一个查询中更新它们,而不是进行20个更新查询,这不是更快吗?这取决于您在做什么。当您喜欢使用复杂的数据结构、依赖实体等时,HIbernate上下文非常方便。简单地更新没有关系的对象最好使用普通sql。另一方面,当您有复杂的结构和关系时,您最好使用hibernate上下文。此外,这取决于你在做什么