Spring JPA检测到可重入刷新
我对Spring2.5中jpa的openjpa实现没有什么问题。我的dao方法:Spring JPA检测到可重入刷新,spring,jpa,flush,openjpa,Spring,Jpa,Flush,Openjpa,我对Spring2.5中jpa的openjpa实现没有什么问题。我的dao方法: @Transactional public User getUserByName(final String name) { return (User) getEntityManager().createQuery("select u from User as u where u.name = :name").setParameter("name", name).getSingleResult(); } 返
@Transactional
public User getUserByName(final String name) {
return (User) getEntityManager().createQuery("select u from User as u where u.name = :name").setParameter("name", name).getSingleResult();
}
返回org.springframework.dao.InvalidDataAccessApiUsageException:
org.apache.openjpa.persistence.InvalidStateException: Detected reentrant flush. Make sure your flush-time instance callback methods or event listeners do not invoke any operations that require the in-progress flush to complete.
at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1904)
at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1679)
at org.apache.openjpa.kernel.QueryImpl.isInMemory(QueryImpl.java:956)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:838)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:779)
at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:525)
at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:254)
at org.apache.openjpa.persistence.QueryImpl.getSingleResult(QueryImpl.java:317)
at org.jpa.dao.UserDao.getUserByName(UserDao.java:71)
//编辑
EntityManager设置:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
<property name="showSql" value="false"/>
</bean>
</property>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.OpenJpaDialect"/>
</property>
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
怎么了?有什么想法吗?我也有同样的问题,请修改主键的实体:
@Id
//@Basic(optional = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
可能可以帮助您。在stacktrace中看不到任何与Spring相关的项目。如何获得EntityManager?将readOnly属性设置为true,然后查看结果。我刚刚添加了有关EntityManager的信息。我已经设置了@Transactional(readOnly=true),是否有其他方法设置readOnly?只是一个建议:您不能在readOnly=false方法中调用readOnly=true方法。我想这解释了为什么会出现异常。我删除了(readOnly=true)属性,异常仍然出现。
@Id
//@Basic(optional = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)