From: Dain S. <da...@da...> - 2002-02-28 20:06:35
|
You need to assign a value to each primary key field in ejbCreate. -dain Robertson, Jason wrote: > Ok, I took out all AUTO INCREMENT and NOT NULL stuff, and now I have another > problem in that it's trying to create the table with NULL as the value for > the primary key, which isn't allowed in MySQL. If I remove the PRIMARY KEY > attribute from the column, I get the exception from the first email. Here's > the log leading up to the exception: > > DEBUG reateEntityCommand.UserRoleEJB UserRoleEJB - Create: pk=null > > DEBUG reateEntityCommand.UserRoleEJB UserRoleEJB - Executing SQL: SELECT > COUNT(*) FROM userroles WHERE id=? > DEBUG UserRoleEJB.id UserRoleEJB - Set parameter: index=1, > jdbcType=INTEGER, value=NULL > DEBUG reateEntityCommand.UserRoleEJB UserRoleEJB - Executing SQL: INSERT > INTO userroles (id, roleName, username, groupId) VALUES (?, ?, ?, ?) > DEBUG UserRoleEJB.id UserRoleEJB - Set parameter: index=1, > jdbcType=INTEGER, value=NULL > DEBUG UserRoleEJB.name UserRoleEJB - Set parameter: index=2, > jdbcType=VARCHAR, value=NULL > DEBUG UserRoleEJB.username UserRoleEJB - Set parameter: index=3, > jdbcType=VARCHAR, value=NULL > DEBUG UserRoleEJB.id UserRoleEJB - Set parameter: index=4, > jdbcType=INTEGER, value=NULL > DEBUG reateEntityCommand.UserRoleEJB UserRoleEJB - Create: Rows affected = 1 > > ERROR plugins.LogInterceptor UserRoleEJB - > TransactionRolledbackException, causedBy: > > > Completely guessing on my part, is the SELECT COUNT(*) statement trying to > verify that a record with the given choice for primary key doesn't exist? If > so, it's strange that it's picking NULL as its primary key, and would be why > the exception is getting thrown. > > Any other ideas? > > Jason > > > p.s. I found a small error in my code below in that I was returning a String > from ejbCreate when it should be an Integer, it's been fixed. > > -----Original Message----- > From: Dain Sundstrom [mailto:da...@da...] > Sent: Thursday, February 28, 2002 2:18 PM > To: Robertson, Jason > Cc: JBoss User (E-mail) > Subject: Re: [JBoss-user] CMP2.0 Create Problem > > > You can't use database autonumber columns, and you can't have not-null > foreign keys. Both of these will eventually be supported. > > -dain > > Robertson, Jason wrote: > > >>jboss3.0.0beta, jdk1.3.1_02, MySQL >> >>Two questions: >> >>1. I understand that for CMR fields you set them in ejbPostCreate, but >> > what > >>if your table (that already exists) has these fields marked as "NOT NULL"? >>The initial INSERT INTO fails since it has that field as NULL and it never >>gets to ejbPostCreate. >> >>2. In my case I have control of the DB layout, so I removed the NOT NULL >>from the initial creation of the table to see it work (and added in checks >>for null objects? is this the best way to do this?). I then get the >>following error: >> >>java.lang.Error: id may not be null >> at org.jboss.ejb.CacheKey.<init>(CacheKey.java:80) >> at >> >> > org.jboss.ejb.plugins.EntityInstanceCache.createCacheKey(EntityInstanceCache > >>.java:63) >> at >> >> > org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersistenceManag > >>er.java:239) >> at >>org.jboss.ejb.EntityContainer.createLocalHome(EntityContainer.java:561) >> at java.lang.reflect.Method.invoke(Native Method) >> at >> >> > org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContaine > >>r.java:1051) >> at >> >> > org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.jav > >>a:73) >> at >> >> > org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySync > >>hronizationInterceptor.java:222) >> at >> >> > org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceInt > >>erceptor.java:136) >> at >> >> > org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLockInterceptor > >>.java:80) >> at >> >> > org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor > >>.java:98) >> at >> >> > org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT. > >>java:167) >> at >> >> > org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:52) > >> at >> >> > org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.jav > >>a:102) >> at >>org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:109) >> at >>org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:469) >> at >> >> > org.jboss.ejb.plugins.local.BaseLocalContainerInvoker.invokeHome(BaseLocalCo > >>ntainerInvoker.java:244) >> at >> >> > org.jboss.ejb.plugins.local.BaseLocalContainerInvoker$HomeProxy.invoke(BaseL > >>ocalContainerInvoker.java:369) >> at $Proxy13.create(Unknown Source) >> at >> >> > test.com.acs.j2ee.framework.user.entity.UserRoleEntityTest.testCreate(Unknow > >>n Source) >> >>My code looks like this: >> >> public String ejbCreate(UserEntity user, RoleEntity role, GroupEntity >>group) >> { >> setId(new Integer(0)); // Auto increment >> return null; >> } >> >> public void ejbPostCreate(UserEntity user, RoleEntity role, GroupEntity >>group) >> { >> setUser(user); >> setRole(role); >> setGroup(group); >> } >> >>where UserEntity, RoleEntity, and GroupEntity are all foriegn-key >>relationships. >> >>In the database, the initial INSERT INTO worked: >> >>mysql> select * from userroles; >>+----+----------+----------+---------+ >>| id | username | roleName | groupId | >>+----+----------+----------+---------+ >>| 7 | NULL | NULL | NULL | >>+----+----------+----------+---------+ >> >>But that "7" isn't making it back to the EJB. Should I not be using the >>"AUTO INCREMENT" feature of MySQL to make sure I get unique primary keys? >> > My > >>DB create statment is: >> >>CREATE TABLE IF NOT EXISTS UserRoles( >> id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, >> username VARCHAR(32), >> roleName VARCHAR(64), >> groupId INTEGER >>) >> >>Jason >> >>p.s. In the JBoss Forums, do a 'search all forums' for "relationship >>ejbPostCreate". For me, at least, I get 272 results, but only number one >> > is > >>shown then there is a "2" and that's the end of the page. >> >> >>_______________________________________________ >>JBoss-user mailing list >>JBo...@li... >>https://lists.sourceforge.net/lists/listinfo/jboss-user >> >> > |