Hello Fay,
Yes, I am aware of that and switching to @Entity dragged me to this bug in
the end. 
In the real scenario AbstractModel Id is a DerivedTS field which Id is also
AbstractModel etc. I had not been able to run without circular id dependency
in first place - hence simplified example I posted here.

Cheers,
Krzysztof



Fay Wang wrote:
> 
> Hi Krzysztof,
>     The exception reported in JIRA-291 is apparently different from the
> exception that you reported:
> 
>  [java] Caused by: <openjpa-2.0.0-SNAPSHOT-r422266:798026 fatal user
> error> org.apache.openjpa.util.MetaDataException: Field
> "DerivedTS.parentModel" cannot be a primary key.  It is of an unsupported
>  type.
>  [java]     at
> org.apache.openjpa.meta.ClassMetaData.validateAppIdClassPKs(ClassMetaData.java:2105)
> 
>    I found that changing AbstractModel from MappedSuperClass to an Entity
> is a workaround for this exception. Can you try it? At the same time, 
> will take a look at the JIRA-291.
> 
> Regards,
> Fay
>  
> 
> 
> ----- Original Message ----
> From: Krzysztof <[email protected]>
> To: [email protected]
> Sent: Wednesday, August 19, 2009 6:12:19 AM
> Subject: Re: Key and Value limitations in a Map<Key,Value>
> 
> 
> Hello Fay,
> 
> Thank you for the hint.
> In the end I narrowed down the problem to self-referencing, composite ID
> which is not supported. 
> 
> Kludging with a generated syntatic Id helps in cases where object model is
> modifiable but it would be wonderful to have this supported at some time. 
> 
> Do you think it is possible in a foreseeable future?
> 
> https://issues.apache.org/jira/browse/OPENJPA-291
> 
> That's a pity since more and more DBs support hierarchical queries
> natively
> (connect-by in oracle, with() in db2, recently postgres) and gives huge
> performance kick where complicated traversal is needed in a single query.
> 
> Cheers
> Krzysztof
> 
> 
> 
> 
> Fay Wang wrote:
>> 
>> Hi,
>>        Can you try making AbstractModel an Entity instead of
>> MappedSuperClass, and making this class a concrete class as shown below?
>> 
>> // abstract class that has common identity and some additional fields, it
>> is
>> //a Key in a map
>> @Inheritance(strategy = InheritanceType.JOINED)
>> @Entity
>> @IdClass(ModelId.ModelImplId.class)
>> public class AbstractModel {
>> 
>> ...
>> 
>> }
>> 
>> -Fay
>> 
>> 
>> 
>> 
>> ----- Original Message ----
>> From: Krzysztof <[email protected]>
>> To: [email protected]
>> Sent: Wednesday, August 5, 2009 9:31:53 AM
>> Subject: Key and Value limitations in a Map<Key,Value>
>> 
>> 
>> Hello,
>> Seems I am completely knotted in a convoluted class graph without any
>> hint
>> from documentation, spec or forum archive. 
>> 
>> Could somebody enlighten me if it is possible to:
>> 
>> A. Have a Key in a persistent Map<Key,Value> such as 
>> 1. the Key has a composite ID composed of classes which have composite
>> IDs
>> themselves? 
>> and
>> 2. They Key is an abstract class that is also used in a Value as a parent
>> in ManyToOne relationship being the part of the Values identity (actual
>> objects - parent and Value being rather different entities)
>> 
>> Hope this example clarifies this rather complicated scenario: 
>> 
>> //abstract class of which children are Values in a map
>> @Entity
>> @IdClass(AbstractTS.TSId.class) //TSId covers SomeOtherClass identity too
>> @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
>> public abstract class AbstractTS
>> {
>> @id SomeOtherClass parent;
>> @id int local_id;
>> @OneToMany
>> private Map<ModelId, DerivedTS> derivedMap; // DerivedTS inherits from
>> AbstractTS - seems to impossible to be mapped properly.
>> 
>> }
>> 
>> // abstract class that has common identity and some additional fields, it
>> is
>> a Key in a map
>> @Inheritance(strategy = InheritanceType.JOINED)
>> @MappedSuperclass
>> @IdClass(ModelId.ModelImplId.class)
>> public abstract class AbstractModel { 
>> @id  AbstractTS parent;
>> @id  int x;
>> @id double y;
>> 
>> @Basic
>> @Lob
>> double[] some_common_data;
>> }
>> 
>> // Identity domain class, that is in fact stripped down version of an
>> abstractModel, both reuse same ID class,  used to retrieve unknown
>> models.
>> 
>> @IdClass(ModelId.ModelImplId.class)
>> @Embeddable
>> public class ModelId  {
>>    
>>     @ManyToOne
>>     public AbstractTS parentTS; //could be either DerivedTS or RawTS.
>>     @Id
>>     @Basic
>>     public double some_value;
>>     @Id
>>     public int modelType;
>> 
>>     @Basic
>>     int some_derived_value;
>> 
>> }
>> 
>> @Entity
>> @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
>> //identity derived from AbstractTS
>> public class RawTS extends AbstractTS
>> {
>> @Basic 
>> int some_values;
>> }
>> 
>> @Entity
>> @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
>> @IdClass(DerivedTS.DerivedTSId.class) // inherits from TSId with
>> additional
>> Identities for parentTS and parentModel
>> public class  DerivedTS extends AbstractTS {
>>     @ManyToOne
>>     //@PrimaryKeyJoinColumns(..) // possibly to provide direct mappings
>> to
>> either RawTS or DerivedTS identity fields
>>         @Id
>>     private AbstractTS parentTS;
>>      
>>         @Id
>>         @ManyToOne
>>         //@PrimaryKeyJoinColumns( {... }) //possibly to provide direct
>> mappings to any model derived from AbstractModel
>>        private AbstractModel parentModel = null;
>> 
>> }
>> 
>> 
>> 
>> To create any working mapping for
>> 
>> Map<ModelId, DerivedTS> seems like an impossible mission, I would
>> appreciate
>> any hints if it is doable at all.
>> 
>> I tried various combinations of @ManyToOne combined with @PrimaryKeys,
>> @MapPrimaryKeys, @ElementCollection etc.
>> Persistence.xml lists all the classes, using openjpa 2.0.0 snapshot.
>> 
>> The last error I got is during enhancement:
>>    [java] Exception in thread "main"
>> <openjpa-2.0.0-SNAPSHOT-r422266:798026
>> fatal user error> org.apache.openjpa.util.MetaDataException: Errors
>> encountered while resolving metadata.  See nested exceptions for details.
>>      [java]     at
>> org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:578)
>>      [java]     at
>> org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:323)
>>      [java]     at
>> org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:625)
>>      [java]     at
>> org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:556)
>>      [java]     at
>> org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:323)
>>      [java]     at
>> org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:251)
>>      [java]     at
>> org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:4593)
>>      [java]     at
>> org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:4540)
>>      [java]     at
>> org.apache.openjpa.enhance.PCEnhancer$1.run(PCEnhancer.java:4510)
>>      [java]     at
>> org.apache.openjpa.lib.conf.Configurations.launchRunnable(Configurations.java:726)
>>      [java]     at
>> org.apache.openjpa.lib.conf.Configurations.runAgainstAllAnchors(Configurations.java:711)
>>      [java]     at
>> org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:4505)
>>      [java]     at
>> org.apache.openjpa.enhance.PCEnhancer.main(PCEnhancer.java:4496)
>>      [java] Caused by: <openjpa-2.0.0-SNAPSHOT-r422266:798026 fatal user
>> error> org.apache.openjpa.util.MetaDataException: Field
>> "DerivedTS.parentModel" cannot be a primary key.  It is of an unsupported
>> type.
>>      [java]     at
>> org.apache.openjpa.meta.ClassMetaData.validateAppIdClassPKs(ClassMetaData.java:2105)
>>      [java]     at
>> org.apache.openjpa.meta.ClassMetaData.validateAppIdClass(ClassMetaData.java:1989)
>>      [java]     at
>> org.apache.openjpa.meta.ClassMetaData.validateIdentity(ClassMetaData.java:1925)
>>      [java]     at
>> org.apache.openjpa.meta.ClassMetaData.validateMeta(ClassMetaData.java:1842)
>>      [java]     at
>> org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1704)
>>      [java]     at
>> org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:733)
>>      [java]     at
>> org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:631)
>>      [java]     at
>> org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:556)
>>      [java]     ... 12 more
>>      [java] NestedThrowables: 
>> 
>> 
>> It fails in validateAppIdClassPKs, but it is hard to guess with what
>> type:
>> ...
>> 2101          case JavaTypes.PC_UNTYPED:
>> 2102                 case JavaTypes.COLLECTION:
>> 2103                 case JavaTypes.MAP:
>> 2104                 case JavaTypes.OID: // we're validating embedded
>> fields
>> 2105                     throw new
>> MetaDataException(_loc.get("bad-pk-type",
>> 2106                         fmds[i]));
>> ....
>> 
>> Does it mean Composite IDs are banned in Map's Key completely?
>> 
>> 
>> Best regards,
>> Krzysztof
>> -- 
>> View this message in context:
>> http://n2.nabble.com/Key-and-Value-limitations-in-a-Map%3CKey%2CValue%3E-tp3393262p3393262.html
>> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>> 
>> 
>> __________________________________________________
>> Do You Yahoo!?
>> Tired of spam?  Yahoo! Mail has the best spam protection around 
>> http://mail.yahoo.com 
>> 
>> 
> 
> -- 
> View this message in context:
> http://n2.nabble.com/Key-and-Value-limitations-in-a-Map%3CKey%2CValue%3E-tp3393262p3472153.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
> 
> 
> 
>       
> 
> 

-- 
View this message in context: 
http://n2.nabble.com/Key-and-Value-limitations-in-a-Map%3CKey%2CValue%3E-tp3393262p3473108.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Reply via email to