You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Drew Lethbridge <dr...@bund.com.au> on 2007/09/19 16:37:56 UTC

jdo index on many-to-many foreign key

Is it ok to ask this list JDO questions in the context of openjpa?   
If not, please let me know.  If it's ok, then the question is as  
follows:

I have declared a foreign key field as follows, and set  
indexed="true", but openjpa does not like it, see following  
exception.  Why is this not supported, and what's my easiest  
workaround?  Thanks...

<field name="_holdings" table="ACCOU__HOLDINGS" indexed="true">
   <collection element-type="Holding" />
   <join column="JDOID"  indexed="true"/>
   <element column="HOLDINGS_JDOID" indexed="true">
     <foreign-key deferred="true" />
   </element>
</field>

      [java] <1.0.0-SNAPSHOT-SNAPSHOT fatal user error>  
org.apache.openjpa.util.MetaDataException: "Account._holdings" is  
marked as indexed, but OpenJPA does not support an index on this  
mapping in this context.
      [java]     at  
org.apache.openjpa.jdbc.meta.MappingInfo.assertNoIndex 
(MappingInfo.java:370)
      [java]     at  
org.apache.openjpa.jdbc.meta.MappingInfo.assertNoSchemaComponents 
(MappingInfo.java:319)
      [java]     at  
org.apache.openjpa.jdbc.meta.strats.RelationToManyTableFieldStrategy.map 
(RelationToManyTableFieldStrategy.java:96)
      [java]     at  
org.apache.openjpa.jdbc.meta.strats.RelationCollectionTableFieldStrategy 
.map(RelationCollectionTableFieldStrategy.java:94)
      [java]     at  
org.apache.openjpa.jdbc.meta.FieldMapping.setStrategy 
(FieldMapping.java:120)
      [java]     at  
org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy 
(RuntimeStrategyInstaller.java:80)
      [java]     at  
org.apache.openjpa.jdbc.meta.FieldMapping.resolveMapping 
(FieldMapping.java:438)
      [java]     at org.apache.openjpa.jdbc.meta.FieldMapping.resolve 
(FieldMapping.java:403)
      [java]     at  
org.apache.openjpa.jdbc.meta.ClassMapping.resolveMapping 
(ClassMapping.java:784)
      [java]     at org.apache.openjpa.meta.ClassMetaData.resolve 
(ClassMetaData.java:1586)
      [java]     at  
org.apache.openjpa.meta.MetaDataRepository.processBuffer 
(MetaDataRepository.java:659)
      [java]     at  
org.apache.openjpa.meta.MetaDataRepository.resolveMapping 
(MetaDataRepository.java:620)
      [java]     at org.apache.openjpa.meta.MetaDataRepository.resolve 
(MetaDataRepository.java:498)
      [java]     at  
org.apache.openjpa.meta.MetaDataRepository.getMetaData 
(MetaDataRepository.java:288)
      [java]     at  
org.apache.openjpa.meta.MetaDataRepository.resolveMeta 
(MetaDataRepository.java:524)
      [java]     at org.apache.openjpa.meta.MetaDataRepository.resolve 
(MetaDataRepository.java:484)
      [java]     at  
org.apache.openjpa.meta.MetaDataRepository.getMetaData 
(MetaDataRepository.java:288)
      [java]     at  
org.apache.openjpa.jdbc.meta.MappingRepository.getMapping 
(MappingRepository.java:279)
      [java]     at  
org.apache.openjpa.jdbc.meta.MappingTool.getMapping(MappingTool.java: 
670)
      [java]     at  
org.apache.openjpa.jdbc.meta.MappingTool.buildSchema(MappingTool.java: 
742)
      [java]     at org.apache.openjpa.jdbc.meta.MappingTool.run 
(MappingTool.java:640)
      [java]     at org.apache.openjpa.jdbc.meta.MappingTool.run 
(MappingTool.java:1063)
      [java]     at my code....


Re: jdo index on many-to-many foreign key

Posted by Drew Lethbridge <dr...@bund.com.au>.
Scratch that question.  There is no foreign key column in the parent  
table of a to-many relationship, which is why it cannot be  
indexed...  Sorry... Not enough coffee.

On 19/09/2007, at 4:37 PM, Drew Lethbridge wrote:

> Is it ok to ask this list JDO questions in the context of openjpa?   
> If not, please let me know.  If it's ok, then the question is as  
> follows:
>
> I have declared a foreign key field as follows, and set  
> indexed="true", but openjpa does not like it, see following  
> exception.  Why is this not supported, and what's my easiest  
> workaround?  Thanks...
>
> <field name="_holdings" table="ACCOU__HOLDINGS" indexed="true">
>   <collection element-type="Holding" />
>   <join column="JDOID"  indexed="true"/>
>   <element column="HOLDINGS_JDOID" indexed="true">
>     <foreign-key deferred="true" />
>   </element>
> </field>
>
>      [java] <1.0.0-SNAPSHOT-SNAPSHOT fatal user error>  
> org.apache.openjpa.util.MetaDataException: "Account._holdings" is  
> marked as indexed, but OpenJPA does not support an index on this  
> mapping in this context.
>      [java]     at  
> org.apache.openjpa.jdbc.meta.MappingInfo.assertNoIndex 
> (MappingInfo.java:370)
>      [java]     at  
> org.apache.openjpa.jdbc.meta.MappingInfo.assertNoSchemaComponents 
> (MappingInfo.java:319)
>      [java]     at  
> org.apache.openjpa.jdbc.meta.strats.RelationToManyTableFieldStrategy.m 
> ap(RelationToManyTableFieldStrategy.java:96)
>      [java]     at  
> org.apache.openjpa.jdbc.meta.strats.RelationCollectionTableFieldStrate 
> gy.map(RelationCollectionTableFieldStrategy.java:94)
>      [java]     at  
> org.apache.openjpa.jdbc.meta.FieldMapping.setStrategy 
> (FieldMapping.java:120)
>      [java]     at  
> org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy( 
> RuntimeStrategyInstaller.java:80)
>      [java]     at  
> org.apache.openjpa.jdbc.meta.FieldMapping.resolveMapping 
> (FieldMapping.java:438)
>      [java]     at org.apache.openjpa.jdbc.meta.FieldMapping.resolve 
> (FieldMapping.java:403)
>      [java]     at  
> org.apache.openjpa.jdbc.meta.ClassMapping.resolveMapping 
> (ClassMapping.java:784)
>      [java]     at org.apache.openjpa.meta.ClassMetaData.resolve 
> (ClassMetaData.java:1586)
>      [java]     at  
> org.apache.openjpa.meta.MetaDataRepository.processBuffer 
> (MetaDataRepository.java:659)
>      [java]     at  
> org.apache.openjpa.meta.MetaDataRepository.resolveMapping 
> (MetaDataRepository.java:620)
>      [java]     at  
> org.apache.openjpa.meta.MetaDataRepository.resolve 
> (MetaDataRepository.java:498)
>      [java]     at  
> org.apache.openjpa.meta.MetaDataRepository.getMetaData 
> (MetaDataRepository.java:288)
>      [java]     at  
> org.apache.openjpa.meta.MetaDataRepository.resolveMeta 
> (MetaDataRepository.java:524)
>      [java]     at  
> org.apache.openjpa.meta.MetaDataRepository.resolve 
> (MetaDataRepository.java:484)
>      [java]     at  
> org.apache.openjpa.meta.MetaDataRepository.getMetaData 
> (MetaDataRepository.java:288)
>      [java]     at  
> org.apache.openjpa.jdbc.meta.MappingRepository.getMapping 
> (MappingRepository.java:279)
>      [java]     at  
> org.apache.openjpa.jdbc.meta.MappingTool.getMapping 
> (MappingTool.java:670)
>      [java]     at  
> org.apache.openjpa.jdbc.meta.MappingTool.buildSchema 
> (MappingTool.java:742)
>      [java]     at org.apache.openjpa.jdbc.meta.MappingTool.run 
> (MappingTool.java:640)
>      [java]     at org.apache.openjpa.jdbc.meta.MappingTool.run 
> (MappingTool.java:1063)
>      [java]     at my code....
>
>