Depending on your model, you might be able to refactor Family and Company to descend from a common class, let's say, Contact, such that

class Contact {
        long id;
        String name;

        [getters and setters]
}

class Family extends Contact {
        ...
}

class Company extends Contact {
        ...
}

class Car {
        Contact owner;
}

You would then have tables:

- contacts (id,name) primary key(id)
- families (id,<additional fields specific to class Family>) primary key(id), foreign key contacts(id) - companies (id,<additional fields specific to class Company>) primary key(id), foreign key contacts(id)


and change the hibernate mapping to use a table-per-subclass mapping.

To me, this looks like a cleaner model, although it will require additional selects to join the families and companies when you read a car.

Another option, if your fields are nullable, is the table per class hierarchy mapping, with a single table for both Family and Company, but all non-inherited fields will cannot be marked not null.

Once you decide to create an inheritance hierarchy, there are several mapping options, see the Inheritance mapping chapter on the documentation and/or Hibernate In Action.

Patrick Casey escribió:
            Ok, I admit it, this is probably a stupid question, but I can't
(curiously) seem to find an answer to this in the SQL spec.

            Is it legal for a child table (the n side of a 0..n)
relationship to have a foreign key relationship to *more than one* parent
table?

            e.g.

            is this legit:

            family

            ---------

            id

            name

            company

            -------

            id

            name

            cars

            --------

            id

            owner_class (either family or company)

            owning_id (foreign_key company(id)), foreign_key family(id))?

            In that either a family, or a company, might potentially own a
car?

            I'm actually not using cars, of course, it's an attachment table
that currently all my tables share (any attachment to any object, gets
stuffed into attachment).

            Naturally, mySQL lets me get away with it, but then mySQL lets
you get away with *anything* so my question is, should I refactor this now
on the expectation that some day I may need to use a real database? Or is
having multiple foreign key constraints on the same column copasetic under
the ANSI spec?

            --- Pat




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to