IBM建议使用EntityManagers的最佳实践是获取/使用/关闭。如果EntityManager没有关闭,同一个EntityManager可能被多个线程使用,这将导致以下错误:org.apache.openjpa.persistence.PersistenceException:Multipleconcurrentthreadsattemptedtoaccessasinglebroker.Bydefaultbrokersarenotthreadsafe;ifyourequireand/orintendabrokertobeaccessedbymorethanonethread,s
一些令人困惑的解释:冲洗();刷新是将底层持久存储与内存中保存的持久状态同步的过程。它会更新或插入正在运行的事务中的表,但它可能不会提交这些更改。如果更改无论如何都只会在提交后持久保存在数据库中,那么为什么要在代码中间进行刷新。并且在运行刷新之后,如果对托管对象进行了任何更改,那么将抛出异常,或者这些将被同步,然后将被保留。如果他们得到同步,那么为什么首先要刷新。 最佳答案 理论上,您(作为JPA的用户)永远不应该(或在极少数情况下)调用flush()。Flushingistheprocessofsynchronizingtheun
在我们的J2EE应用程序中,我们使用EJB-3有状态bean来允许前端代码创建、修改和保存持久实体(通过JPA-2管理)。看起来像这样:@LocalBean@Stateful@TransactionAttribute(TransactionAttributeType.NEVER)publicclassMyEntityControllerimplementsSerializable{@PersistenceContext(type=PersistenceContextType.EXTENDED)privateEntityManagerem;privateMyEntitycurrent;p
我的Java应用程序中存在缓慢的内存泄漏。我想知道这是否可能是由于在使用时不总是关闭Entitymanager造成的。但是使用myeclipse生成数据库代码,我得到这样的方法:publicMeitupdate(Meitentity){logger.info("updatingMeitinstance");try{Meitresult=getEntityManager().merge(entity);logger.info("updatesuccessful");returnresult;}catch(RuntimeExceptionre){logger.error("updatefa
我在2个对象父子对象之间有一个简单的OneToMany关联,如下所示。父实体@EntitypublicclassParent{@Id@GeneratedValue(strategy=GenerationType.AUTO)privateLongid;privateStringname;@VersionprivateLongversion;@OneToMany(cascade=CascadeType.ALL,orphanRemoval=true,fetch=FetchType.EAGER)Listchildren=newArrayList();....}子实体@Entitypublicc
因为调用flush()来让每个实体从内存持久化到数据库。因此,如果我调用太多不必要的flush(),可能会花费很多时间,因此对于性能来说不是一个好的选择。这是一个我不知道什么时候调用flush()的场景?//OrderandItemhaveBidirectionalRelationshipsOrderord=Neword("myfirstorder");Itemitem=NewItem("tv",10);//...processitemandordobjectem.persist(ord);//emisaninstanceofEntityManagerem.flush();//No.1
我将Wildfly8.1与包含实体的EJB项目(EJB3.2)一起使用。当尝试将实体管理器注入(inject)我的一个Bean时,我得到以下信息:JBAS011440:Can'tfindapersistenceunitnamednullindeployment\"EntitiesProject.jar\""},"JBAS014771:Serviceswithmissing/unavailabledependencies"=>["jboss.deployment.unit.\"EntitiesProject.jar\".weld.weldClassIntrospectorismissin
我一直在使用DAO模式来访问我一直在构建的应用程序中的持久层。我已经实现的其中一件事是围绕我的DAO实现进行“包装”以进行验证。包装器将我的DAO实例作为构造函数参数,并实现与DAO类似的接口(interface),除了抛出的异常类型。例如:业务逻辑接口(interface)publicinterfaceUserBLInt{privatevoidassignRightToUser(intuserId,intrightId)throwsSomeAppException;}DAO接口(interface)publicinterfaceUserDAOInt{privatevoidassign
如何重置/重启实体管理器?查看Doctrines文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/transactions-and-concurrency.html#approach-2-explicitly我看到实体管理器在异常时关闭。这对我来说是个问题,因为我有一个RabbitMQ服务器并且消费者始终在运行。在测试期间,我们正在模拟不同的场景,丢失的数据就是其中之一。好吧,这引起了异常,而且我们的Try/Catch逻辑工作得很好,除了它还关闭了实体管理器。阅读他们遇到或曾经遇到
因此,在使用Doctrine2违反完整性约束后,EntityManager喜欢以一种无法继续使用所述EntityManager的方式关闭。普遍的想法似乎是您应该创建一个新的EntityManager,而不是被允许捕获这个简单的异常并以优雅的方式处理它(伙计们/讽刺的美妙设计)。但是,当使用带有封闭实体管理器的Bisna库/ZF1.12时会出现问题。Bisna库不提供在Container类中关闭后创建具有相同名称(即“默认”)的新EntityManager的公共(public)方法。我的问题是处理此问题的最佳方法是什么。在违反完整性约束后,必须有一种从容恢复的方法。