there were an existing application, which everything worked fine. But for various reasons I had to switch from sessionFactory "org.springframework.orm.hibernate3.LocalSessionFa ctoryBean" to the entityManagerFactory "org.springframework.orm.jpa.LocalContainerEntityM anagerFactoryBean". Now I�m getting an "org.springframework.dao.InvalidDataAccessApiUsage Exception: Removing a detached instance server.model.instance.ComponentInstance" at a junit-integration.Test. After a five or six hours of fruitless googling, I decided to write my issue here. I would be thankful and It would be great for any help.
This is the junit test code, and the code which is mentioned at the stack trace:
the Method deleteAndFlushCode:public void deleteComponentInstance ( ComponentInstance instanceToDelete ) { setComponentInstanceForeignKeyToNull ( instanceToDelete ); deleteAndFlush ( instanceToDelete ); }
the Method setComponentInstanceForeignKeyToNullCode:public <P> void deleteAndFlush ( P persistentObject ) { Session session = sessionFactory.getCurrentSession (); session.delete ( persistentObject ); session.flush (); }
this is my "beans.xml" after switching to the entityManagerCode:public void setComponentInstanceForeignKeyToNull ( Class<?> clazz, String attribute, Object value ) { StringBuilder hqlQuery = new StringBuilder () .append ( "update " ) .append ( clazz.getSimpleName () ) .append ( " entity set entity." ).append ( attribute ) .append ( " = null where entity." ).append ( attribute ) .append ( " = :actualValue" ); Session currentSession = this.sessionFactory.getCurrentSession (); currentSession.createQuery ( hqlQuery.toString () ) .setEntity ( "actualValue", value ) .executeUpdate (); }
this is my beans.xml befor the switch:Code:<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="persistenceUnitName" value="spring-jpa" /> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="false" /> <property name="database" value="HSQL" /> </bean> </property> </bean> <bean id="sessionFactory" factory-bean="entityManagerFactory" factory-method="getSessionFactory" /> <tx:annotation-driven transaction-manager="transactionManager" /> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean>
my new needed persistence.xml for the EntityManager:Code:<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mappingLocations" ref="hibernateMappingFiles" /> <property name="hibernateProperties" ref="hibernateProperties" /> <tx:annotation-driven transaction-manager="transactionManager" /> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" />
Code:<persistence-unit name="spring-jpa"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" /> <property name="hibernate.show_sql" value="false" /> <property name="hibernate.format_sql" value="false" /> <property name="hibernate.hbm2ddl.auto" value="none" /> <property name="javax.persistence.validation.mode" value="none" /> <property name="hibernate.jdbc.use_streams_for_binary" value="true" /> <property name="hibernate.jdbc.fetch_size" value="100" /> <property name="hibernate.current_session_context_class" value="org.springframework.orm.hibernate3.SpringSessionContext" /> </properties>


Reply With Quote

i debugged the Error and it occurs at --> session.delete ( persistentObject );
