Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [eclipselink-users] customize OneToMany Mapping

>
> Where do the tables T1, and T2 come from, is Posten using multiple tables or
> inheritance? Please include its mappings, they may be wrong. The m-m join
> looks correct.

here is the full mapping declaration
where ClassBuilderUtil.createClassDescriptor is a simple helper for generating ClassDescriptor
/*
    public static RelationalDescriptor createClassDescriptor(Class <?> guard,
            String schema,String table,String primaryKey,
            MappingDescriptor ...descriptions)

*/
and MappingDesriptor is an abstract baseClass for generating fieldmappings

....


        ClassDescriptor wptBestellungenDescriptor = ClassBuilderUtil.createClassDescriptor(
            WptBestellungen.class,
            null,"WPT_BESTELLUNGEN","TID",
            new DirectMappingDescriptor("tid","WPT_BESTELLUNGEN.TID")
            );

        ClassDescriptor bestellerDescriptor = ClassBuilderUtil.createClassDescriptor(
            Besteller.class,
            null,"RELAT_INFO_APPNAME_LISTE","TID",
            new DirectMappingDescriptor("tid","TID"),
            new DirectMappingDescriptor("entry","EINTRAG")
            );

        ClassDescriptor postenDescriptor = ClassBuilderUtil.createClassDescriptor(
            Posten.class,
            null,"WPT_BESTELLPOSTEN_LISTE","TID",
            new DirectMappingDescriptor("tid","WPT_BESTELLPOSTEN_LISTE.TID"),
            new DirectMappingDescriptor("entry","EINTRAG")
            );
       
        wptBestellungenDescriptor.addTableName("WPT_BESTELLPOSTEN_LISTE");
        postenDescriptor.addTableName("WPT_BESTELLUNGEN"); // 1

        OneToOneMapping mapping = new OneToOneMapping();
        mapping.setAttributeName("besteller");
        mapping.setReferenceClass(Besteller.class);
        mapping.addForeignKeyFieldName("WPT_BESTELLUNGEN.RELATIONEN_INFO_ID", "RELAT_INFO_APPNAME_LISTE.TID");
        mapping.dontUseIndirection();
        wptBestellungenDescriptor.addMapping(mapping);

        ManyToManyMapping mmm = new ManyToManyMapping();
        mmm.setAttributeName("posten");
        mmm.setReferenceClass(Posten.class);
        mmm.dontUseIndirection();
        mmm.setRelationTableName("wpt_posten_bestellungen_lbez");
       mmm.addSourceRelationKeyFieldName("wpt_posten_bestellungen_lbez.wpt_bestellungen_id","WPT_BESTELLUNGEN.TID");
       mmm.addTargetRelationKeyFieldName("wpt_posten_bestellungen_lbez.wpt_bestellposten_liste_id","WPT_BESTELLPOSTEN_LISTE.TID");
       wptBestellungenDescriptor.addMapping(mmm);

        Project sample = ProjectBuilder.createProject("WptBestellungen");
        sample.addDescriptor(wptBestellungenDescriptor);
        sample.addDescriptor(bestellerDescriptor);
        sample.addDescriptor(postenDescriptor);
        sample.setLogin(applyLogin());
        return sample;

ad 1 ) "postenDescriptor.addTableName("WPT_BESTELLUNGEN");" with a lot try and error i found out this mapping would not work withotu this

regards sepp

> > my Mapping definition
> > ...
> > ManyToManyMapping mmm = new ManyToManyMapping();
> > mmm.setAttributeName("posten");
> > mmm.setReferenceClass(Posten.class);
> > mmm.dontUseIndirection();
> > mmm.setRelationTableName("wpt_posten_bestellungen_lbez");
> > mmm.addSourceRelationKeyFieldName("wpt_posten_bestellungen_lbez.wpt_bestellungen_id","WPT_BESTELLUNGEN.TID");
> > mmm.addTargetRelationKeyFieldName("wpt_posten_bestellungen_lbez.wpt_bestellposten_liste_id","WPT_BESTELLPOSTEN_LISTE.TID");
> > wptBestellungenDescriptor.addMapping(mmm);
> > ...
> >
> > the problem is it only returns 1 row instead of multiple rows
> >
> > to make it clearer some sql
> >
> > -- the "handmade" query
> > SELECT liste.tid,liste.eintrag FROM wpt_bestellposten_liste liste
> > JOIN wpt_posten_bestellungen_lbez lbez ON lbez.wpt_bestellposten_liste_id
> > = liste.tid
> > JOIN wpt_bestellungen b ON lbez.wpt_bestellungen_id = b.tid
> > WHERE b.tid = 119.9;
> > -- returns 5 records (es expected)
> >
> > -- eclipselink generated query
> > SELECT t1.TID, t2.TID, t1.EINTRAG FROM
> > wpt_posten_bestellungen_lbez t0,
> > WPT_BESTELLUNGEN t2,
> > WPT_BESTELLPOSTEN_LISTE t1
> > WHERE (((t0.wpt_bestellungen_id = 119.9)
> > AND (t1.TID = t0.wpt_bestellposten_liste_id))
> > AND (t2.TID = t1.TID)
> > );
> > -- returns only 1 record
> >
> > -- the query eclipselink should generate
> > SELECT t1.TID, t2.TID, t1.EINTRAG FROM
> > wpt_posten_bestellungen_lbez t0,
> > WPT_BESTELLUNGEN t2,
> > WPT_BESTELLPOSTEN_LISTE t1
> > WHERE (((t0.wpt_bestellungen_id = 119.9)
> > AND (t1.TID = t0.wpt_bestellposten_liste_id))
> > AND (t2.TID = t0.wpt_bestellungen_id) -- <<< t2.TID != t1.TID
> > );
> >
> > as you see the second AND _expression_ is parameterized not as expected.
> > I tried to rewrite the mapping in a lot of different ways, but never got
> > the expected result.
> >
> >>Before JPA, the typical way to use EclipseLink (then called TopLink) was
> to
> >>use the MappingWorkbench to describe your metadata and export either Java
> code
> >>or an XML document that contains that metadata. I realize that will not
> get you
> >>all the way to your goal. If you use the facility to export java code, it
> will,
> >>however give you a way to generate and see the type of java code that
> >>EclipseLink expects for its descriptors and mappings - a way to
> prototype.where can I download this workbench ?
> >
> > One main reason for not using JPA is, that i am not able to get it running
> > in a simple RCP application (without any Application-Server). I found some
> > links describing solutions for this problems but I am not able to develop
> > sample applications with our own background. This is a lot easier using
> > the "native" eclipse-link api.
> >
> > regards
> >
> > Sepp
> >
> >
> > _________________________________________________________________
> > Hol dir 30 kostenlose Emoticons für deinen Windows Live Messenger
> > http://www.livemessenger-emoticons.com/funfamily/de-at/
> > _______________________________________________
> > eclipselink-users mailing list
> > eclipselink-users@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/eclipselink-users
> >
> >
>
>
> -----
> http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
> http://www.eclipse.org/eclipselink/
> EclipseLink , http://www.oracle.com/technology/products/ias/toplink/
> TopLink
> Wiki: http://wiki.eclipse.org/EclipseLink EclipseLink ,
> http://wiki.oracle.com/page/TopLink TopLink
> Forums: http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
> http://www.nabble.com/EclipseLink-f26430.html EclipseLink
> Book: http://en.wikibooks.org/wiki/Java_Persistence Java Persistence
> --
> View this message in context: http://www.nabble.com/customize-OneToMany-Mapping-tp24568733p24701765.html
> Sent from the EclipseLink - Users mailing list archive at Nabble.com.
>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users


Mit Windows Live können Sie Ihre Fotos organisieren, bearbeiten und freigeben.

Back to the top