我正在用ejb3和jsf开发一个web应用程序。我想在jsf托管bean中操作jpa实体。通常,当我在我的管理bean中使用我的实体时,我得到LazyInitializationExceptions,因为当它们进入web容器时获得分离。
有解决这个问题的最佳实践吗?
我知道我可以使用OpenSessionInView模式,所以我在JSF中有一个开放的hibernate会话。这是否意味着我可以简单地使用myentity . setsomething(…),它将被持久化到数据库?
问候,罗兰
使用OpenSessionInView;调用"myentity . setsomething(…)"只会改变该会话中的值。当您希望存储对象以供以后使用时,您仍然必须持久化该对象。
我更喜欢创建一个"业务层",事务在其中开始,并在该业务层内处理所有jpa操作。也就是说,每个业务方法都在自己的事务中,并为上面的gui层提供指定的服务。
我强烈建议你去看看Seam,你可以在这里找到它。