I cannot get this test through, please help
transvia Sep 21, 2007 2:41 PMI creat a project from seam-gen2.0 CR. I am using Jboss server 4.2.1, Seam2.0 CR, MySQL 5.0. The project can be built, depoyed and run correctly. Then I create a simple test case, but I cannot make it works.
I tested that entity factory can be created; entity manager can also be created. But I cannot do database operation, including select and insert. Please help!
Test code:
package persistentTier; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.PersistenceContext; import javax.persistence.Query; import org.hibernate.Session; import org.jboss.seam.annotations.In; import org.jboss.seam.mock.SeamTest; import org.testng.annotations.Test; import org.tt.user.User; public class EntityManagerTest extends SeamTest { //@PersistenceContext private EntityManager em; @Test public void unitTestEntityManager() throws Exception{ EntityManagerFactory emf = Persistence.createEntityManagerFactory("tt"); em =emf.createEntityManager(); User user=em.find(User.class, new Double(1)); assert user.getPassword().equals("5527686"); em.close(); } }
User class:
package org.tt.user; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.validator.NotNull; import org.jboss.seam.annotations.Name; @Entity @Name ("user") @Table (name="user") public class User implements Serializable { private double id; private String username; private String password; public User (){ username=""; password=""; } @Id @GeneratedValue(strategy =GenerationType.AUTO) public double getId () {return this.id;} public void setId(long id){this.id=id;} public String getUsername(){return this.username;} public void setUsername(String username){this.username=username;} public String getPassword(){return this.password;} public void setPassword(String password){this.password=password;} }
Database, MySQL 5.0
CREATE TABLE `user` ( `id` double NOT NULL auto_increment, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; /*Data for the table `user` */ insert into `user`(`id`,`username`,`password`) values (1,'oldreaper','5527686');
Erro message
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not load an entity: [org.tt.user.User#1.0] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:647) at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:194) at persistentTier.EntityManagerTest.unitTestEntityManager(EntityManagerTest.java:29) Caused by: org.hibernate.exception.SQLGrammarException: could not load an entity: [org.tt.user.User#1.0] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.loader.Loader.loadEntity(Loader.java:1865) at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48) at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42) at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2992) at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:395) at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375) at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139) at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195) at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103) at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878) at org.hibernate.impl.SessionImpl.get(SessionImpl.java:815) at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808) at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:174) ... 23 more Caused by: java.sql.SQLException: Table not found in statement [select user0_.id as id2_0_, user0_.username as username2_0_, user0_.password as password2_0_ from user user0_ where user0_.id=?] at org.hsqldb.jdbc.Util.throwError(Unknown Source) at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source) at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source) at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.doPrepareStatement(BaseWrapperManagedConnection.java:386) at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.prepareStatement(BaseWrapperManagedConnection.java:374) at org.jboss.resource.adapter.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:187) at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:497) at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:415) at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139) at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1538) at org.hibernate.loader.Loader.doQuery(Loader.java:661) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224) at org.hibernate.loader.Loader.loadEntity(Loader.java:1851) ... 35 more ... Removed 22 stack frames