openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Craig L Russell <Craig.Russ...@Sun.COM>
Subject Re: Help with FieldMapping metadata
Date Wed, 08 Jul 2009 05:08:43 GMT
Here's some more information:

I thought getJoinForeignKey should return a logical foreign key, but  
with this mapping, it doesn't work. None of the possible relationship  
column mapping information seems to be filled in. This is after  
resolving the metadata at runtime.

I've tried getColumn.getTarget, getColumn.getTargetField,  
fieldMapping.getForeignKey, fieldMapping.getJoinForeignKey,  
fieldMapping.getValueInfo.getForeignKey.

Here's what I've tried, to no avail:
                 relatedTypeMapping =  
fieldMapping.getDeclaredTypeMapping();
                 relatedType = relatedTypeMapping.getDescribedType();
                 fieldMapping.getColumns();
                 Class oid = relatedTypeMapping.getObjectIdType();
                 StringBuffer message = new StringBuffer("For class: "  
+ domainTypeHandler.getName() +
                         " field: " + name + " related type is: " +  
relatedType.getName() +
                         " objectid type: " + oid.getName());
                 // get the column corresponding to the local column
                 for (Column localColumn: columns) {
                     message.append(" column: " +  
localColumn.getName());
                     String target = localColumn.getTarget();
                     message.append(" target-> " + target);
                     String targetField = localColumn.getTargetField();
                     message.append(" targetField-> " + targetField);
                     ForeignKey jfk = fieldMapping.getJoinForeignKey();
                     message.append(" join-> " + jfk);
                     ForeignKey fk = fieldMapping.getForeignKey();
                     message.append(" fk-> " + jfk);
                     ValueMappingInfo vinfo =  
fieldMapping.getValueInfo();
                     message.append(" vinfo-> " + vinfo);
                     ForeignKey vfk = vinfo.getForeignKey();
                     message.append(" vfk-> " + jfk);

For class:  
com.mysql.clusterj.jpatest.model.LongLongStringFKRelationship field:  
longLongStringPKRelationship related type is:  
com.mysql.clusterj.jpatest.model.LongLongStringPKRelationship objectid  
type: com.mysql.clusterj.jpatest.model.LongLongStringOid column:  
longfk1 target-> null targetField-> null join-> null fk-> null vinfo->  
org.apache.openjpa.jdbc.meta.ValueMappingInfo@d6f628 vfk-> null  
column: longfk2 target-> null targetField-> null join-> null fk-> null  
vinfo-> org.apache.openjpa.jdbc.meta.ValueMappingInfo@d6f628 vfk->  
null column: stringfk target-> null targetField-> null join-> null fk- 
 > null vinfo-> org.apache.openjpa.jdbc.meta.ValueMappingInfo@d6f628  
vfk-> null


Thanks,

Craig

On Jul 7, 2009, at 4:06 PM, Craig L Russell wrote:

> Hi,
>
> I've got two classes with a one-many relationship based on column  
> values, but there's no foreign key.
>
> I've looked up the ClassMapping and FieldMapping for the fields in  
> the "many" class and have the FieldMapping object for the  
> relationship that's mapped to the columns.
>
> What I'm looking for is how to extract the column values from the  
> oid class corresponding to the primary key of the related class.
>
> If I can get the pk columns that correspond to the joined columns  
> then I can get the corresponding FieldMapping for the primary key  
> fields. But I can't find how to get either the corresponding joined  
> columns or the corresponding primary key field mapping. FieldMapping  
> has getJoinForeignKey but there's no foreign key, so it's null.
>
> Seems there should be a getJoinSomething that gives me the pairs of  
> <Column localColumn, Column relatedColumn> corresponding to the  
> @JoinColumn annotation but I can't find it.
>
> Any ideas?
>
> Thanks,
>
> Craig
>
> /** Schema
> *
> create table longlongstringfk (
> longpk1 bigint not null,
> longpk2 bigint not null,
> stringpk varchar(10) not null,
> longfk1 bigint not null,
> longfk2 bigint not null,
> stringfk varchar(10) not null,
> stringvalue varchar(10),
>        CONSTRAINT PK_longlongstringfk PRIMARY KEY (longpk1, longpk2,  
> stringpk)
> */
>
> public class LongLongStringFKRelationship extends  
> LongLongStringConstants implements Serializable {
>
>    @javax.persistence.Id
>    @javax.persistence.Column(name="longpk1")
>    private long longpk1;
>
>    @javax.persistence.Id
>    @javax.persistence.Column(name="longpk2")
>    private long longpk2;
>
>    @javax.persistence.Id
>    @javax.persistence.Column(name="stringpk")
>    private String stringpk;
>
>
>    @ManyToOne
>    @JoinColumns({
>        @JoinColumn(name="longfk1", referencedColumnName="longpk1"),
>        @JoinColumn(name="longfk2", referencedColumnName="longpk2"),
>        @JoinColumn(name="stringfk", referencedColumnName="stringpk")
>        })
>    private LongLongStringPKRelationship longLongStringPKRelationship;
>
> Here's the related class:
>
> /** Schema
> *
> create table longlongstringpk (
> longpk1 bigint not null,
> longpk2 bigint not null,
> stringpk varchar(10) not null,
> stringvalue varchar(10),
>        CONSTRAINT PK_longlongstringpk PRIMARY KEY (longpk1, longpk2,  
> stringpk)
>
> public class LongLongStringPKRelationship extends  
> LongLongStringConstants implements Serializable {
>
>    @javax.persistence.Id
>    @javax.persistence.Column(name="longpk1")
>    private long longpk1;
>
>    @javax.persistence.Id
>    @javax.persistence.Column(name="longpk2")
>    private long longpk2;
>
>    @javax.persistence.Id
>    @javax.persistence.Column(name="stringpk")
>    private String stringpk;
>
>    @javax.persistence.Column(name="stringvalue")
>    private String stringvalue;
>
>    @OneToMany(mappedBy = "longLongStringPKRelationship")
>    private Collection<LongLongStringFKRelationship>  
> longLongStringFKRelationships;
>
>
>
> Craig L Russell
> Architect, Sun Java Enterprise System http://db.apache.org/jdo
> 408 276-5638 mailto:Craig.Russell@sun.com
> P.S. A good JDO? O, Gasp!
>

Craig L Russell
Architect, Sun Java Enterprise System http://db.apache.org/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!


Mime
View raw message