Define composite keys in reactor config

1 view
Skip to first unread message

Dave Phipps

unread,
Sep 4, 2009, 8:14:02 AM9/4/09
to reactor-users
Hi,

I know that Reactor supports composite primary keys but how do you
define this in reactor config. Do I do this:

object name=tblParAtt
hasOne name=tblParish
relate from=ParishRef to=ParishRef
/hasOne
hasOne name=tblPerson
relate from=UniqueNo to=UniqueNo
/hasOne
/object

or this

object name=tblParAtt
hasMany name=tblParish
relate from=ParishRef to=ParishRef
/hasMany
hasMany name=tblPerson
relate from=UniqueNo to=UniqueNo
/hasMany
/object

or a different way altogether?

Individually the the primary keys may appear more than once but as a
composite they are unique. Does reactor know this from the 2 hasOne's?

Cheers,

Dave

Dave Phipps

unread,
Sep 4, 2009, 7:50:31 PM9/4/09
to reactor-users
Hi,

Apols if you get this more than once. I seem to be having problems
sending to the list!

Tom Chiverton

unread,
Sep 7, 2009, 4:30:57 AM9/7/09
to reacto...@googlegroups.com
On Saturday 05 Sep 2009, Dave Phipps wrote:
> Apols if you get this more than once. I seem to be having problems
> sending to the list!

Google mail doesn't show your own posts to mailing lists until someone
replies.

--

Tom Chiverton
Developer

Tom.Ch...@halliwells.com
3 Hardman Square, Manchester, M3 3EB

****************************************************

This email is sent for and on behalf of Halliwells LLP.

Halliwells LLP is a limited liability partnership registered in England and Wales under registered number OC307980 whose registered office address is at Halliwells LLP, 3 Hardman Square, Spinningfields, Manchester, M3 3EB. A list of members is available for inspection at the registered office together with a list of those non members who are referred to as partners. We use the word “partner” to refer to a member of the LLP, or an employee or consultant with equivalent standing and qualifications. Regulated by the Solicitors Regulation Authority.

CONFIDENTIALITY

This email is intended only for the use of the addressee named above and may be confidential or legally privileged. If you are not the addressee you must not read it and must not use any information contained in nor copy it nor inform any person other than Halliwells LLP or the addressee of its existence or contents. If you have received this email in error please delete it and notify Halliwells LLP IT Department on 0870 365 2500.

For more information about Halliwells LLP visit
www.Halliwells.com.

Dave Phipps

unread,
Sep 8, 2009, 6:07:31 AM9/8/09
to reacto...@googlegroups.com
That explains that then! I think I was worried as someone normally
replies pretty quickly and I hadn't had any replies.

Cheers,

Dave

2009/9/7 Tom Chiverton <tom.ch...@halliwells.com>:

Tom Chiverton

unread,
Sep 8, 2009, 6:20:56 AM9/8/09
to reacto...@googlegroups.com
On Tuesday 08 Sep 2009, Dave Phipps wrote:
> That explains that then! I think I was worried as someone normally
> replies pretty quickly and I hadn't had any replies.

:-)

To get into your question, Reactor does composite primary keys by putting many
<relate> into a <hasOne>/<hasMany>, iirc.

Dave Phipps

unread,
Sep 8, 2009, 7:12:27 AM9/8/09
to reacto...@googlegroups.com
Thanks Tom, but that only works if the composite key consists of
fields from one table, eg:

object name='tbl2'
hasOne name="tbl1"
relate from='fld1' to='fld1'
relate from='fld2' to='fld2'
/hasOne
/object

whereas I need to do this:

object name='tbl3'
hasOne name="tbl4"
relate from='fld4' to='fld4'
/hasOne
hasOne name="tbl5"
relate from='fld5' to='fld5'
/hasOne
/object

Should the second one be a hasMany or a hasOne as individually there
may be more than one row matching fld4 or fld5 but as a composite key
(tbl4.fld4 and tbl5.fld5) it needs to be a hasOne.

Does that make sense?

Cheers,

Dave


2009/9/8 Tom Chiverton <tom.ch...@halliwells.com>:

Tom Chiverton

unread,
Sep 8, 2009, 8:48:54 AM9/8/09
to reacto...@googlegroups.com
On Tuesday 08 Sep 2009, Dave Phipps wrote:
> Thanks Tom, but that only works if the composite key consists of
> fields from one table, eg:
> object name='tbl2'
> hasOne name="tbl1"
> relate from='fld1' to='fld1'
> relate from='fld2' to='fld2'
> /hasOne
> /object
>
> whereas I need to do this:
>
> object name='tbl3'
> hasOne name="tbl4"
> relate from='fld4' to='fld4'
> /hasOne
> hasOne name="tbl5"
> relate from='fld5' to='fld5'
> /hasOne
> /object

So you are saying (fld4,fld5) is the PK for tbl3 ? But each tbl3 has one and
only one fld4 tbl4 (and tbl5) ?

Then I don't see what the PK of tbl3 has got to do with it, as you can't
go 'back' from tbl4 (or tbl5) to a tbl3 record anyway (even if you entered
SQL directly) right ?
In which case hasOne is correct.
Reply all
Reply to author
Forward
0 new messages