我有一个简单的关系数据库,只有3个表(一对一和一对多关系),我需要从这3个表中提取数据并将int存储在POJO对象中存储在用户会话中。但是,这些表中的数据经常从另一个与webapp分离的应用程序更新,因此当存储在用户会话中的POJO必须在每次请求时使用新数据进行更新。查询数据库中的所有数据并在每次请求时构建新的用户对象(即使使用优化的存储过程)效率太低。 所以我的问题是:
使用数据库中的更新数据刷新用户对象的最佳方法是什么?
我已经看过使用ORM框架(特别是hibernate)来实现用户对象和数据库之间的持久性,但我担心的是:
我在想我可以按照我想要的方式创建我的实体对象,让hibernate做它的事情并创建新表。然后我会将当前数据传输到新表并继续使用hibernate。
我知道我真的没有任何具体问题,因为我无法找到解决问题的最佳方案,我不想深入使用hibernate,然后发现它不适合我的应用程序。< / p>
先谢谢。
答案 0 :(得分:1)
我认为Hibernate不会使从数据库刷新用户对象更有效率。但是,它可以使你更有效地编写DB persitence代码。
要回到原始问题,您可以使用version
字段,而不是在每个请求上重新加载整个用户对象。这可以在有或没有Hibernate的情况下完成。
首先,在主用户表中添加version
列。每次您的webapp或外部应用程序更新用户时,它还必须将version
递增一。然后在每个请求上,您调用一个只返回用户的version
的小查询(或sp)。如果版本与会话中存储的版本不同,则重新加载用户对象,否则不会。
如果用户数据不经常更改,这可以大大提高性能,因为用于检索版本的查询应该非常快。或者,您可以使用last_modified
(时间戳)列而不是version
列。
使用Hibernate / JPA时,您可以使用@Version
注释让Hibernate自动管理版本字段。但它也可以在没有Hibernate的情况下手动完成。
答案 1 :(得分:0)
我建议:
使用此方法,永远不会读取数据库,除非刷新缓存或重新部署应用程序。