2010-01-23 5 views
1

J'ai un petit problème avec l'implémentation openjpa de jpa avec le ressort 2.5. Ma méthode dao:JPA Flush réentrant détecté

@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(); 
} 

retours 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) 

// EDIT paramètres 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" /> 

Comment obtenir-vous un EntityManage? Dans la classe dao:

@PersistenceContext(type = PersistenceContextType.EXTENDED) 
protected EntityManager entityManager; 

Qu'est-ce qui ne va pas? Une idée?

+0

Impossible de voir les éléments liés à Spring dans la pile. Comment obtenez-vous un 'EntityManager'? – axtavt

+0

Configurer l'attribut readOnly égal à true et voir ce qui se passe. –

+0

Je viens d'ajouter des informations sur EntityManager. J'ai mis en place @Transactional (readOnly = true), est-il un autre moyen de définir readOnly ?? – nablik

Répondre

0

J'ai le même problème, et modifier mon entité pour la clé primaire:

@Id 
//@Basic(optional = false) 
@GeneratedValue(strategy = GenerationType.IDENTITY) 

peut-être vous aider.