[hibernate-dev] mutable versus immutable natural keys
Steve Ebersole
steve at hibernate.org
Wed Dec 7 22:27:25 EST 2011
Simple versus compound keys does not effect this discussion of
mutable/immutable.
Composite natural keys are already supported.
On Wed 07 Dec 2011 08:42:11 PM CST, Elias Ross wrote:
> On Wed, Dec 7, 2011 at 6:08 PM, Steve Ebersole<steve at hibernate.org> wrote:
>
>> But in either case we have a
>> violation of the immutability.
>
> One of the use cases way back when I tried using Natural Keys was for
> accessing user accounts indexed by phone number. So 90% of our data
> access pattern was just mapping a phone number to a primary key,
> loading that entity, and the rest of the data would be cached...
>
> Phone numbers are interesting as they are considered immutable, but in
> the U.S. we infrequently have area code splits. There's also (fairly
> rare) cases where people update their phone number, say, if they move
> cities. Or, a phone number may be dropped and then later reused by an
> entirely different user. Maybe the user can expect some disruption in
> service but the expectation is service is available minutes after
> porting is done.
>
> There's also many issues dealing with various identities such as
> device ID or subscriber IDs. For example MIN versus MSISDN versus MDN.
> In all cases for a carrier we would store one of these values and then
> build an index with the others. The index is basically a table as
> such:
>
> class NumberMapping {
> @Id
> long id;
> String number;
> int type; // usually an enum
> Subscriber sub;
> }
>
> So you would select data using two columns "String, int" (not one). It
> would be nice to have NaturalKey be composite, if possible...Maybe
> declared as above? Or it might make sense to simply do like you do for
> composite @Id.
>
> @NaturalId
> class PhoneNumber {
> @Column
> String number;
> @Column
> int type;
> }
>
> @Immutable
> class NumberMapping {
> @Id
> long id;
> @NaturalId
> PhoneNumber number;
> @ManyToOne
> Subscriber sub;
> }
>
> The above is sort of venturing off-topic but maybe compound keys need
> to be discussed as well.
--
steve at hibernate.org
http://hibernate.org
More information about the hibernate-dev
mailing list