• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: One-to-One Relationship
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: One-to-One Relationship


  • Subject: Re: One-to-One Relationship
  • From: Robert Walker <email@hidden>
  • Date: Wed, 22 Mar 2006 01:28:12 -0500

Louis,

One-to-one relationships are interesting beasts in EOF.  It seems to have something to do with EOF's primary key generation.  Since a one-to-one relationship connects the PK of one table to the PK of another table you don't want EOF to try to generate keys for both sides.

It is possible to set one side of the relationship to propagate it's primary key to the other side.  Doing so will tell EOF to generate one PK and then propagate that key to the other object.  The effect of this is that both objects are always created (both tables with have the same number of rows with PK matches for each row), so you may end up with a lot of rows in one table, even if you don't need them.  This is probably fine as long as your tables aren't huge and you are using a reasonably modern RDBMS.

One workaround for this is to use a one-to-many relationship and add validation logic to ensure that only one object can exist on the many side.  Now you can treat this like a one-to-one without creating unused rows on one side.  Additionally you can add a "cover" method that returns the first (and only) object from the many side.
--
Robert Walker
email@hidden

There are 10 types of people in the world, those who count in binary, and those who don't.


On Mar 22, 2006, at 1:06 AM, Louis Demers wrote:

Hi,
-----------
Background:

I have two objects setup tied by a bidirectional one-to-one optional relationships. both classes have acessors for the relationships in their classe.

TelehoneLine.java contains
public class TelephoneLine extends EOGenericRecord {
...
    public Contact employee() {
        return (Contact)storedValueForKey("employee");
    }

    public void setEmployee(Contact value) {
        takeStoredValueForKey(value, "employee");
    }
...
}
Contact.java contains
public class Contact extends EOGenericRecord {
...
    public TelephoneLine telephoneLine() {
        return (TelephoneLine)storedValueForKey("telephoneLine");
    }

    public void setTelephoneLine(TelephoneLine value) {
        takeStoredValueForKey(value, "telephoneLine");
    }
...
}

Both one-to-one relationships (employee and telephoneLine) are defined
optional, nullify, DO NOT own destinations. and their foreign keys allow zeros.

--------
Problem:

When I use "addObjectToBothSidesOfRelationshipWithKey"

aTelephoneLine.addObjectToBothSidesOfRelationshipWithKey(selectedEmployee,"employee");

only half of the relationships get updated. I crafted the following code that does update both sides

-----------
Workaround:

        if (aTelephoneLine.employee() != null ){
                aTelephoneLine.employee().setTelephoneLine(null);
        }
        aTelephoneLine.setEmployee(selectedEmployee);
        if (selectedEmployee != null ){
                selectedEmployee.setTelephoneLine(aTelephoneLine);
        }

but I don't undestand why "addObjectToBothSidesOfRelationshipWithKey" doesnt' work and suspect I screwed up somewhere.


--
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: One-to-One Relationship
      • From: Chuck Hill <email@hidden>
References: 
 >One-to-One Relationship (From: Louis Demers <email@hidden>)

  • Prev by Date: One-to-One Relationship
  • Next by Date: Re: One-to-One Relationship
  • Previous by thread: One-to-One Relationship
  • Next by thread: Re: One-to-One Relationship
  • Index(es):
    • Date
    • Thread