Skip to main content

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

Hi Sepp,

  I think I got confused a bit.  (too much going on here... sorry)

For a OneToMany (rather than OneToOne) with a join table, just use a ManyToMany mapping. There should be an example of one of those in the example code I pointed you at earlier.

-Tom

Tom Ware wrote:
Hi Sepp,

Now I understand. It was not clear from your previous description of the problem that you want to map OneToOne mapping with a join table.

That functionality is actually very new in EclipseLink - part of our work on the JPA 2.0 specification, but it is available on our latest stream.

  Some details can be found at these links:

http://wiki.eclipse.org/EclipseLink/Development/JPA2.0/one-to-one_via_jointable

https://bugs.eclipse.org/bugs/show_bug.cgi?id=282553

Please note, this functionality is only currently available on our recent 2.0 nightly builds.

There is support for defining sequence objects, but the public access is through our JPA DDL generation feature. For those that are not using JPA, this is a more difficult question. It may be easier to just create them on the DB and use them from EclipseLink. If you are set on using EclipseLink to create sequences, there is some example code in our testing framework in our core test framework. (org.eclipse.persistence.testing.tests.feature.OracleNativeSeqInitTest)

-Tom

Robert Wimmer wrote:
Hi Tom,

thanks for your response

 >
> Can you provide a more in-depth description of the mapping you are trying to > create between target_table and table_between. i.e. The classes involved and > the relevant instance variables and the tables involved. The reason I ask is > that based on your initial description, I was under the impression this is a
 > typical 1-M mapping, but it seems it may not be.
 >

public class Contact {
   Long id;
   String type,label;
}

public class Address {
     Long id;
     String firstname,lastname;      List <Contact> contacts;
}

The Tables look like this (PostgreSQL Syntax)

CREATE TABLE contact (
   id BIGSERIAL PRIMARY KEY,
   TEXT type,
   TEXT label
);

CREATE TABLE person (
   id BIGSERIAL PRIMARY KEY,
   TEXT firstname,
   TEXT lastname
);

CREATE TABLE contact_person (
   contact_id BIGINT NOT NULL REFERENCES contact(id),
   person_id BIGINT NOT NULL REFERENCES person(id)
);

So the query for the contacts of  a person  i have to do the following

SELECT * FROM contact c
JOIN contact_person cp ON cp.contact_id = c.id
WHERE cp.person_id = ?

This is indirection is used really often and it is some sort of a design standard (the reason is you can establish new relationships between tables without changing the table definition itself).

So how can I desribe this kind of relationship with the eclipselink api ? Is it possible with a OneToMany mapping

         OneToManyMapping mtm = new OneToManyMapping();
         mtm.setAttributeName("contacts");
         mtm.setReferenceClass(Contact.class);
??? mtm.addTargetForeignKeyFieldName("contact.id", "contact_person.contact_id");
         ???          ??? mtm.dontUseIndirection();
         personDescriptor.addMapping(mtm);


Thanks in Advance Sepp

P.S.: I also dont know who to define Postgres Secquences in eclipselink and find no help in the Web for it. Any Idea ?









------------------------------------------------------------------------
Teilen Sie Ihre Erinnerungen mit jeder beliebigen Person online beliebigen Person online. <http://www.microsoft.com/austria/windows/windowslive/products/photos-share.aspx?tab=1>


------------------------------------------------------------------------

_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users



Back to the top