Results 1 to 3 of 3

Thread: Spring + JPA (Toplink) not a known entity type (InvalidDataAccessApiUsageException)

  1. #1
    Join Date
    Mar 2007
    Posts
    1

    Default Spring + JPA (Toplink) not a known entity type (InvalidDataAccessApiUsageException)

    Hi,

    I am trying to test the Spring + JPA (using Toplink). I have followed Mark Fisher's blog (http://blog.springframework.com/mark...a-in-spring-20) to create this example. Thank you Mark – it was very helpful.

    I will really appreciate if someone can help me to identify the problem.

    My Environment:
    ============
    JDK 1.6.0
    spring-framework-2.0.2
    Toplink
    Derby Database
    NetBeans IDE 5.5
    Window XP Pro

    Problem:
    =======
    When I run the program the getJpaTemplate().find( ..) call works fine (returns 1 record), but I get the following error when I try to call getJpaTemplate().persist(data). Here is the actual output of my program.

    (Actual program and config files are attached)
    ------------------------------ Output: Start --------------------------------------
    ...........
    INFO: Loading XML bean definitions from class path resource [play/spring-jpa.xml]
    Mar 7, 2007 11:56:57 AM

    ................... (some log removed to fit the size limit)

    Mar 7, 2007 11:56:57 AM org.springframework.beans.factory.support.DefaultL istableBeanFactory preInstantiateSingletons
    INFO: Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultL istableBeanFactory defining beans [userDataDAO,entityManagerFactory,dataSourceManager ,transactionManager]; root of BeanFactory hierarchy]
    Mar 7, 2007 11:56:58 AM org.springframework.jdbc.datasource.DriverManagerD ataSource setDriverClassName
    INFO: Loaded JDBC driver: org.apache.derby.jdbc.ClientDriver
    [TopLink Config]: 2007.03.07 11:56:58.537--ServerSession(8469441)--Thread(Thread[main,5,main])--The alias name for the entity class [class play.UserData] is being defaulted to: UserData.
    [TopLink Config]: 2007.03.07 11:56:58.552--ServerSession(8469441)--Thread(Thread[main,5,main])--The table name for entity [class play.UserData] is being defaulted to: USERDATA.
    [TopLink Config]: 2007.03.07 11:56:58.568--ServerSession(8469441)--Thread(Thread[main,5,main])--The column name for element [private java.lang.String play.UserData.uid] is being defaulted to: UID.
    [TopLink Config]: 2007.03.07 11:56:58.583--ServerSession(8469441)--Thread(Thread[main,5,main])--The column name for element [private java.lang.String play.UserData.lastName] is being defaulted to: LASTNAME.
    [TopLink Config]: 2007.03.07 11:56:58.583--ServerSession(8469441)--Thread(Thread[main,5,main])--The column name for element [private java.lang.String play.UserData.firstName] is being defaulted to: FIRSTNAME.
    [TopLink Config]: 2007.03.07 11:56:58.583--ServerSession(8469441)--Thread(Thread[main,5,main])--The column name for element [private java.lang.String play.UserData.password] is being defaulted to: PASSWORD.
    [TopLink Info]: 2007.03.07 11:56:58.662--ServerSession(8469441)--Thread(Thread[main,5,main])--TopLink, version: Oracle TopLink Essentials - 2.0 (Build b37-rc (02/28/2007))
    [TopLink Config]: 2007.03.07 11:56:58.693--ServerSession(8469441)--Connection(30091157)--Thread(Thread[main,5,main])--connecting(DatabaseLogin(
    platform=>DerbyPlatform
    user name=> ""
    connector=>JNDIConnector datasource name=>null
    ))
    [TopLink Config]: 2007.03.07 11:56:59.053--ServerSession(8469441)--Connection(14464692)--Thread(Thread[main,5,main])--Connected: jdbc:derby://localhost:1527/TellabsAppDB
    User: app
    Database: Apache Derby Version: 10.1.3.1
    Driver: Apache Derby Network Client JDBC Driver Version: 10.2.1.7 - (453926)
    [TopLink Config]: 2007.03.07 11:56:59.068--ServerSession(8469441)--Connection(25389802)--Thread(Thread[main,5,main])--connecting(DatabaseLogin(
    platform=>DerbyPlatform
    user name=> ""
    connector=>JNDIConnector datasource name=>null
    ))
    [TopLink Config]: 2007.03.07 11:56:59.068--ServerSession(8469441)--Connection(14696971)--Thread(Thread[main,5,main])--Connected: jdbc:derby://localhost:1527/TellabsAppDB
    User: app
    Database: Apache Derby Version: 10.1.3.1
    Driver: Apache Derby Network Client JDBC Driver Version: 10.2.1.7 - (453926)
    [TopLink Info]: 2007.03.07 11:56:59.193--ServerSession(8469441)--Thread(Thread[main,5,main])--file:/C:/usr/tellabs/projects/netbeans/Play/build/classes/-SpringJpaGettingStarted login successful
    [TopLink Fine]: 2007.03.07 11:56:59.240--ServerSession(8469441)--Connection(20693770)--Thread(Thread[main,5,main])--CREATE TABLE USERDATA (UID VARCHAR(255) NOT NULL, LASTNAME VARCHAR(255), FIRSTNAME VARCHAR(255), PASSWORD VARCHAR(255), PRIMARY KEY (UID))
    [TopLink Warning]: 2007.03.07 11:56:59.647--ServerSession(8469441)--Thread(Thread[main,5,main])--Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b37-rc (02/28/2007))): oracle.toplink.essentials.exceptions.DatabaseExcep tion
    Internal Exception: java.sql.SQLException: Table/View 'USERDATA' already exists in Schema 'APP'.Error Code: -1
    Call:CREATE TABLE USERDATA (UID VARCHAR(255) NOT NULL, LASTNAME VARCHAR(255), FIRSTNAME VARCHAR(255), PASSWORD VARCHAR(255), PRIMARY KEY (UID))
    QueryataModifyQuery()
    [TopLink Fine]: 2007.03.07 11:57:00.069--ServerSession(8469441)--Connection(14335210)--Thread(Thread[main,5,main])--SELECT UID, LASTNAME, FIRSTNAME, PASSWORD FROM USERDATA
    [uid = u1
    firstName = last-1
    lastName = User-1
    password = pass1
    ]
    org.springframework.dao.InvalidDataAccessApiUsageE xception: Object: uid = xxx
    firstName = xxxx
    lastName = yyyy
    password = ppp
    is not a known entity type.; nested exception is java.lang.IllegalArgumentException: Object: uid = xxx
    firstName = xxxx
    lastName = yyyy
    password = ppp
    is not a known entity type.
    Caused by: java.lang.IllegalArgumentException: Object: uid = xxx
    firstName = xxxx
    lastName = yyyy
    password = ppp
    is not a known entity type.
    at oracle.toplink.essentials.internal.sessions.UnitOf WorkImpl.registerNewObjectForPersist(UnitOfWorkImp l.java:3198)
    at oracle.toplink.essentials.internal.ejb.cmp3.base.E ntityManagerImpl.persist(EntityManagerImpl.java:19 0)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.orm.jpa.ExtendedEntityManagerC reator$ExtendedEntityManagerInvocationHandler.invo ke(ExtendedEntityManagerCreator.java:283)
    at $Proxy8.persist(Unknown Source)
    at org.springframework.orm.jpa.JpaTemplate$5.doInJpa( JpaTemplate.java:263)
    at org.springframework.orm.jpa.JpaTemplate.execute(Jp aTemplate.java:191)
    at org.springframework.orm.jpa.JpaTemplate.persist(Jp aTemplate.java:261)
    at play.UserDataDAO.save(UserDataDAO.java:19)
    at play.Main.testSpringJPA(Main.java:23)
    at play.Main.main(Main.java:30) ------------------------------ Output: End --------------------------------------

    ------------------------------ Main.java: Start --------------------------------------
    package play;

    import java.util.List;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlAp plicationContext;

    public class Main {

    public static ApplicationContext context
    = new ClassPathXmlApplicationContext(new String[] {"play/spring-jpa.xml"});

    public static ApplicationContext getSpringContext() {
    return context;
    }

    public static void testSpringJPA() {
    try {
    UserDataDAO dao = (UserDataDAO)getSpringContext().getBean("userDataD AO");
    List<UserData> list = dao.getAll();
    System.out.println(list);
    UserData u = new UserData("xxx","xxxx","yyyy","ppp");
    dao.save(u);
    } catch (Throwable t) {
    t.printStackTrace();
    }
    }
    public static void main(String[] args) {
    //System.out.println(((MyService)context.getBean("My Service")).doSomething("hi and hello to all"));
    testSpringJPA();
    }

    }
    ------------------------------ Main.java: End --------------------------------------

    ------------------------------ UserData.java: Start --------------------------------------
    package play;

    import java.io.Serializable;
    import javax.persistence.Entity;
    import javax.persistence.Id;

    @Entity
    public class UserData implements Serializable {
    @Id
    private String uid = null;
    private String lastName = null;
    private String firstName = null;
    private String password = null;

    //................

    }
    ------------------------------ UserData.java: End --------------------------------------

    ------------------------------ UserDataDAO.java: Start --------------------------------------
    package play;

    import java.util.List;
    import org.springframework.orm.jpa.support.JpaDaoSupport;
    import org.springframework.transaction.annotation.Transac tional;

    @Transactional
    public class UserDataDAO extends JpaDaoSupport {

    public List<UserData> getAll() {
    List<UserData> list = getJpaTemplate().find("select r from UserData r");
    return list;
    }
    public List<UserData> findByName(String name) {
    return getJpaTemplate().find("select r from UserData r where r.uid = ?1", name);
    }

    public void save(UserData data) {
    getJpaTemplate().persist(data);
    }

    public UserData update(UserData UserData) {
    return getJpaTemplate().merge(UserData);
    }

    public void delete(UserData UserData) {
    getJpaTemplate().remove(UserData);
    }
    }
    ------------------------------ UserDataDAO.java: End --------------------------------------
    Attached Files Attached Files

  2. #2
    Join Date
    Nov 2007
    Posts
    3

    Default same problem seen with blog.jpa.dao sample code

    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)

  3. #3
    Join Date
    Nov 2007
    Posts
    3

    Default

    Problem looks like load time weaver related. The entity not found error went away when I switched to this load time weaver in the unit test.
    http://static.springframework.org/sp...loadtimeweaver

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •