现在我正在使用 JPA。我想知道的是:
我有很多相互映射的表。当我查看日志时,我发现经过简单查询后,正在从数据库中提取大量信息。如果一次有很多查询会怎样?或者它会正常工作吗?如何提高性能?
最佳答案
ORM 框架会带来开销。因为它的级别相当高,所以有时需要生成大量 native SQL 查询才能在一两行 JPQL 或纯 EntityManager
操作中获得您想要的结果。
但是,JPA 使用两个缓存 - L1 和 L2。一个在实体级别上运行,另一个在 PersistenceUnits 级别上运行。因此,您可能会看到生成了很多 SQL 查询,但一段时间后,您应该会缓存一些数据。
如果你对性能不满意,你可以尝试使用延迟加载集合或自己获取所需的数据(你可能对这件事感兴趣 Bozho's post)。
最后,如果您发现缓存没有提高您的性能并且手工制作的 JPQL 查询没有正确完成工作 - 您可以随时恢复为普通 SQL 查询。请注意,这些查询会绕过 JPA 缓存,并且可能需要您在执行 native 查询(或在事件事务开始时调用它)之前进行一些刷新。
尽管您会选择优化路线 - 首先在您的环境中测试,然后自己回答是否需要此优化。做一些重度测试,性能测试等等。
“过早的优化是万恶之源。” D. Knuth
关于mysql - JPA 映射的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10379683/