You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Hugi Thordarson <hu...@karlmenn.is> on 2016/03/12 12:09:14 UTC

Evil relationships

Hi all.
I’m currently working with an old DB with Extremely Meaningful™ PKs. Here are three tables from the DB and the columns that form their primary keys.

— Company
company_number

— Customer
company_number
customer_number

— Invoice
company_number
customer_number
invoice_number

As you’ve probably already figured out, “Customer” is joined to “Company” on “company_number” and “Invoice” is joined to “Customer” on “company_number” and “customer_number”.

For the most part, this object graph works fine in Cayenne, but there’s one thing: In addition to the relationship to “Customer”, “Invoice" also has a relationship to “Company” (based on company_number, having this direct relationship is useful for reporting). But if I set the “customer” relationship on “Invoice”, the “company” relationship does not get set.

Is there some way for me to notify Cayenne that more relationships might be involved in a change to “Customer”

Cheers,
- hugi

Re: Evil relationships

Posted by Hugi Thordarson <hu...@karlmenn.is>.
Yeah, that’s how it’s currently modeled, but using that relationship instead of the direct one requires an additional join (which means a performance hit for large datasets).

- hugi



> On 13. mar. 2016, at 20:20, Lon Varscsak <lo...@gmail.com> wrote:
> 
> I don’t have an answer for you.  But I work with a lot of meaningful PKs.
> :D  I would have a relationship from Customer back to Company.  Then in
> reporting it would be invoice.customer.comapny.
> 
> -Lon
> 
> On Sat, Mar 12, 2016 at 4:09 AM, Hugi Thordarson <hu...@karlmenn.is> wrote:
> 
>> Hi all.
>> I’m currently working with an old DB with Extremely Meaningful™ PKs. Here
>> are three tables from the DB and the columns that form their primary keys.
>> 
>> — Company
>> company_number
>> 
>> — Customer
>> company_number
>> customer_number
>> 
>> — Invoice
>> company_number
>> customer_number
>> invoice_number
>> 
>> As you’ve probably already figured out, “Customer” is joined to “Company”
>> on “company_number” and “Invoice” is joined to “Customer” on
>> “company_number” and “customer_number”.
>> 
>> For the most part, this object graph works fine in Cayenne, but there’s
>> one thing: In addition to the relationship to “Customer”, “Invoice" also
>> has a relationship to “Company” (based on company_number, having this
>> direct relationship is useful for reporting). But if I set the “customer”
>> relationship on “Invoice”, the “company” relationship does not get set.
>> 
>> Is there some way for me to notify Cayenne that more relationships might
>> be involved in a change to “Customer”
>> 
>> Cheers,
>> - hugi


Re: Evil relationships

Posted by Lon Varscsak <lo...@gmail.com>.
I don’t have an answer for you.  But I work with a lot of meaningful PKs.
:D  I would have a relationship from Customer back to Company.  Then in
reporting it would be invoice.customer.comapny.

-Lon

On Sat, Mar 12, 2016 at 4:09 AM, Hugi Thordarson <hu...@karlmenn.is> wrote:

> Hi all.
> I’m currently working with an old DB with Extremely Meaningful™ PKs. Here
> are three tables from the DB and the columns that form their primary keys.
>
> — Company
> company_number
>
> — Customer
> company_number
> customer_number
>
> — Invoice
> company_number
> customer_number
> invoice_number
>
> As you’ve probably already figured out, “Customer” is joined to “Company”
> on “company_number” and “Invoice” is joined to “Customer” on
> “company_number” and “customer_number”.
>
> For the most part, this object graph works fine in Cayenne, but there’s
> one thing: In addition to the relationship to “Customer”, “Invoice" also
> has a relationship to “Company” (based on company_number, having this
> direct relationship is useful for reporting). But if I set the “customer”
> relationship on “Invoice”, the “company” relationship does not get set.
>
> Is there some way for me to notify Cayenne that more relationships might
> be involved in a change to “Customer”
>
> Cheers,
> - hugi