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:[EMAIL PROTECTED]]
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
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/jboss-user
> 



_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to