geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gianny Damour <>
Subject Re: OpenEJB PK issue
Date Thu, 15 Dec 2005 20:48:01 GMT
Hi Manu,

Once again, thanks for your debugging!

I had a look to the DD and I have identified why the itests showing this 
specifc case are working for us and not for you: basically in our test, 
we have a OTM relationship between a CMP with a simple PK on the 
one-side and a CMP with a compound PK on the many-side. Your case is 
slightly different: the CMP on the one-side has a compound PK and hence 
another code path is used.

Basically, the problem that you are raising is exactly what I was trying 
to describe in one of my previous email:
About createCMPFieldAccessors, the 
relatedEntity.getPrimaryKeyFields().size()  test must also be replaced 
by an isCompoundPK test. However, it seems that we should add a special 
processing to handle a CMP field mapped to a FK column referencing the 
(single) PK column associated to a compound PK having a single field.
Hm; I realise that this was far to be understandable.

This special processing works as follow:
1. if the CMP field, CMPField, is mapped to a FK column;
2. if the PK column referenced by this FK column is associated to a 
compound PK column;
3. if the compound PK uses more than one CMP field:
  3.1 then the accessor of CMPField must be read-only. (this is what we 
currently have)
4. otherwise:
  4.1 the accessor of CMPField must be read-write.

This purpose of the " if (null != 
ejb.getAssociationEndDefiningFKAttribute(name)) {" block is to set the 
CMR field at the same time than the CMP field when a CMP field is mapped 
to a FK column. BTW, it seems that you are familiar with OpenEJB and 
TranQL; so, do you want to work on a patch to fix this problem? FYI, we 
have a large and very interesting piece of work ahead of us to support 
the persistence part of the EJB3 specification :)


Manu George wrote:

> Hi Gianny,
>                 I put in a dirty hack and got my app working. The 
> problem I was facing was in the
>  private LinkedHashMap createCMPFieldAccessors(SQLQueryBuilder 
> queryBuilder, LinkedHashMap cmrFieldAccessor) throws QueryException { 
> method in CMPContainerBuilder
> Here there is a   if (null != 
> ejb.getAssociationEndDefiningFKAttribute(name)) {
> check inside which the CMR foreign Key was set to a read only field 
> during deployment. In my app the CMR FK is a part of the primary key 
> also. So during ejbCreate it gives error saying that it is a readonly 
> field. I just added a check to not go into this loop if the FK is also 
> a part of the PK.
> and the app seems to be working.  Hope this gives you more info abt 
> the problem I am facing
> Regards
> Manu

View raw message