I see a similar problem. Whats a good way to trouble shoot this? I 'm using spring 2.0.6, Java 5 on Windows XP Pro as well as Redhat Linux.
I did the following.
0. I got this blog example to work with a Oracle database.
http://blog.interface21.com/main/200...-in-spring-20/
Then I made the following changes:
1. add a transactional attribute to JpaRestaurantDao
Code:
@Transactional
public class JpaRestaurantDao extends JpaDaoSupport implements RestaurantDao {
2. add <tx:annotation-driven/> to the context config file
3. Wrote a new class with a main method as below:
Code:
package blog.jpa.dao;
import java.util.HashSet;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import blog.jpa.domain.Address;
import blog.jpa.domain.Entree;
import blog.jpa.domain.Restaurant;
public class DaoServiceTest {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("/blog/jpa/dao/rest-applicationContext.xml");
RestaurantDao dao = (RestaurantDao)ctx.getBean("restaurantDao");
Restaurant rest = new Restaurant();
rest.setId(12345);
rest.setName("New Rest");
Address addr = new Address();
addr.setId(3456);
addr.setStreetName("Main Street");
addr.setStreetNumber(1234);
rest.setAddress(addr);
Entree entr = new Entree();
entr.setId(8976);
entr.setName("Bakalva");
entr.setVegetarian(true);
HashSet<Entree> set = new HashSet<Entree>();
set.add(entr);
rest.setEntrees(set);
dao.save(rest);
}
}
4. When I ran it I got the following exception.
Code:
2007-11-11 23:50:05,518 DEBUG org.springframework.jdbc.datasource.DriverManagerDataSource - Creating new JDBC Connection to [jdbc:oracle:thin:@host.domain.com:1521:db]
[TopLink Config]: 2007.11.11 11:50:05.849--ServerSession(22669032)--Connection(23231510)--Thread(Thread[main,5,main])--Connected: jdbc:oracle:thin:@host.domain.com:1521:db
User: user
Database: Oracle Version: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
Driver: Oracle JDBC driver Version: 10.1.0.2.0
[TopLink Info]: 2007.11.11 11:50:05.939--ServerSession(22669032)--Thread(Thread[main,5,main])--file:/C:/development/workspace/springJpatest/build/classes/-springJpatest login successful
2007-11-11 23:50:05,979 DEBUG org.springframework.orm.jpa.JpaTransactionManager - Opened new EntityManager [oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl@ed8eb5] for JPA transaction
2007-11-11 23:50:06,009 DEBUG org.springframework.jdbc.datasource.DriverManagerDataSource - Creating new JDBC Connection to [jdbc:oracle:thin:@host.domain.com:1521:db]
2007-11-11 23:50:06,329 DEBUG org.springframework.orm.jpa.JpaTransactionManager - Exposing JPA transaction as JDBC transaction [SimpleConnectionHandle: oracle.jdbc.driver.T4CConnection@d99277]
2007-11-11 23:50:06,329 DEBUG org.springframework.transaction.support.TransactionSynchronizationManager - Bound value [org.springframework.jdbc.datasource.ConnectionHolder@e86614] for key [org.springframework.jdbc.datasource.DriverManagerDataSource@1eef2c] to thread [main]
2007-11-11 23:50:06,329 DEBUG org.springframework.transaction.support.TransactionSynchronizationManager - Bound value [org.springframework.orm.jpa.EntityManagerHolder@8809ce] for key [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@185e90f] to thread [main]
2007-11-11 23:50:06,329 DEBUG org.springframework.transaction.support.TransactionSynchronizationManager - Initializing transaction synchronization
2007-11-11 23:50:06,329 DEBUG org.springframework.transaction.interceptor.TransactionInterceptor - Getting transaction for [blog.jpa.dao.RestaurantDao.save]
2007-11-11 23:50:06,349 DEBUG org.springframework.transaction.support.TransactionSynchronizationManager - Retrieved value [org.springframework.orm.jpa.EntityManagerHolder@8809ce] for key [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@185e90f] bound to thread [main]
2007-11-11 23:50:06,369 DEBUG org.springframework.transaction.interceptor.TransactionInterceptor - Completing transaction for [blog.jpa.dao.RestaurantDao.save] after exception: org.springframework.dao.InvalidDataAccessApiUsageException: Object: blog.jpa.domain.Restaurant@143073a is not a known entity type.; nested exception is java.lang.IllegalArgumentException: Object: blog.jpa.domain.Restaurant@143073a is not a known entity type.
2007-11-11 23:50:06,369 DEBUG org.springframework.transaction.interceptor.RuleBasedTransactionAttribute - Applying rules to determine whether transaction should rollback on org.springframework.dao.InvalidDataAccessApiUsageException: Object: blog.jpa.domain.Restaurant@143073a is not a known entity type.; nested exception is java.lang.IllegalArgumentException: Object: blog.jpa.domain.Restaurant@143073a is not a known entity type.
2007-11-11 23:50:06,369 DEBUG org.springframework.transaction.interceptor.RuleBasedTransactionAttribute - Winning rollback rule is: null
2007-11-11 23:50:06,369 DEBUG org.springframework.transaction.interceptor.RuleBasedTransactionAttribute - No relevant rollback rule found: applying superclass default
2007-11-11 23:50:06,369 DEBUG org.springframework.orm.jpa.JpaTransactionManager - Triggering beforeCompletion synchronization
2007-11-11 23:50:06,369 DEBUG org.springframework.orm.jpa.JpaTransactionManager - Initiating transaction rollback
2007-11-11 23:50:06,369 DEBUG org.springframework.orm.jpa.JpaTransactionManager - Rolling back JPA transaction on EntityManager [oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl@ed8eb5]
2007-11-11 23:50:06,419 DEBUG org.springframework.orm.jpa.JpaTransactionManager - Triggering afterCompletion synchronization
2007-11-11 23:50:06,419 DEBUG org.springframework.transaction.support.TransactionSynchronizationManager - Clearing transaction synchronization
2007-11-11 23:50:06,419 DEBUG org.springframework.transaction.support.TransactionSynchronizationManager - Removed value [org.springframework.orm.jpa.EntityManagerHolder@8809ce] for key [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@185e90f] from thread [main]
2007-11-11 23:50:06,419 DEBUG org.springframework.transaction.support.TransactionSynchronizationManager - Removed value [org.springframework.jdbc.datasource.ConnectionHolder@e86614] for key [org.springframework.jdbc.datasource.DriverManagerDataSource@1eef2c] from thread [main]
2007-11-11 23:50:06,419 DEBUG org.springframework.orm.jpa.JpaTransactionManager - Closing JPA EntityManager [oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl@ed8eb5] after transaction
Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: Object: blog.jpa.domain.Restaurant@143073a is not a known entity type.; nested exception is java.lang.IllegalArgumentException: Object: blog.jpa.domain.Restaurant@143073a is not a known entity type.
Caused by: java.lang.IllegalArgumentException: Object: blog.jpa.domain.Restaurant@143073a is not a known entity type.
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:3198)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.persist(EntityManagerImpl.java:190)
at org.springframework.orm.jpa.JpaTemplate$5.doInJpa(JpaTemplate.java:263)
at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:191)
at org.springframework.orm.jpa.JpaTemplate.persist(JpaTemplate.java:261)
at blog.jpa.dao.JpaRestaurantDao.save(JpaRestaurantDao.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:296)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:177)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy15.save(Unknown Source)
at blog.jpa.dao.DaoServiceTest.main(DaoServiceTest.java:45)