我的应用程序大量使用线程池,甚至可以使用aspectj建议在另一个线程中执行类的方法。
这给我带来了如何使用Hibernate JPA实现设计数据库实体的问题,尤其是一对多,多对多等等。问题是我的应用程序使用EntityManager存储在ThreadLocal中的每线程会话模式,因此在一个线程中获得的实体经常传递给另一个线程。如果我在实体中有任何一对多的映射,则延迟提取将不起作用,因为实体不具有持久性。
我看到的解决方法是在对任何对延迟提取实体的访问之前调用merge()将实体附加到线程的实体管理器,这也需要实体的包装类,它在关联实体的每个getter中调用merge()。这有一个缺点,如果我现在改变实体的某些字段但不想合并到持久性,那么调用getter会搞砸。
我做了一些研究,但没有得到更好的解决方案。我想知道这应该是面向线程池的应用程序的常见做法。必须有一个最佳实践模式。
另一种方式是永远不会使用这样的一对多设施,但这会带来很多无聊的编码负担。
有没有人有更好的主意?