java—在jpa javase应用程序中启用惰性实体加载

ubby3x7f  于 2021-07-05  发布在  Java
关注(0)|答案(0)|浏览(172)

我在javafx应用程序上工作了几年,目前使用的是一个应用程序管理的jpa entitymanager Hibernate 5.4.19.Final 作为jpa的实现, MySQL 8 或者 MS SQL Server 2008 作为数据库和 HikariCP 3.2.0 作为数据库连接池。它继续运行 JDK 11.0.8+10 来自OpenJDK。未实现二级缓存,因为同一数据库上有多个应用程序示例在运行,以保持所有应用程序上的数据一致(这可能会在将来很长一段时间内更改为客户机-服务器体系结构)。
该应用程序是多线程的,在executor服务中运行javafx任务和javafx服务,默认情况下,executor服务限制为15个线程。任务和服务都使用jpa访问底层数据库。
数据库访问是通过一个实现crud函数的非常基本的dao来处理的。dao是在dao工厂上建造的,dao工厂正在开放 EntityManagerFactory . 对于每个线程,都会构造一个新的dao,dao工厂以一个特定的方式跟踪dao ConcurrentHashMap<Thread, DAO> DAOS . dao工厂在打开一个新dao之前检查线程是否死机。如果是这种情况,dao工厂将通知dao关闭entitymanager(如果有)并从dao工厂的Map中删除 DAOS .
论道安的每一次积垢作业 EntityManager 在操作完成后构造并关闭。dao上的一个常见操作是将数据加载到javafx表视图,如 Task<MyEntityWrapper> 通过onsucceeded处理程序将数据提供给tableview。任务由executor服务运行。 MyEntityWrapper 正在 Package 一个 MyEntity 道中的对象。
在某些情况下,实体也会将任务返回给onsucceeded处理程序。
我注意到,这种方法可以很好地处理两个或多个实体之间没有关联的简单实体,但是当使用 LazyInitializationException . 我必须用 FetchType.EAGER 这似乎降低了性能。
我禁用了自动提交功能 HikariCP ,设置批大小,设置为顺序插入和更新,并在不需要写入访问权限的查询中设置只读提示 Hibernate 以提高性能。
有没有办法在这个应用程序上启用延迟加载?
是否有任何hibernate配置调整或最佳实践,我错过了提高性能?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题