views:

54

answers:

2

I am looking for a way to have a typesafe primary key for my entities using generics in Hibernate. Instead of doing this

@Entity
public class User{

@PrimaryKey
Long id

}

I was thinking of doing this...

@Entity
public class User{

@PrimaryKey
PrimaryKey<User,Long> id

}

Or take the type inference even further...

Any ideas? Has anybody ever tried this before? Would you do this by making your class PrimaryKey embeddable?

@Entity
public class User extends MyEntity<Long>//Primary key type{

@PrimaryKey
PrimaryKey<User> id;

}
+2  A: 

While it is possible to use a PK class and to use it as a member of entities with the @EmbeddedId, this would typically make all your JQL queries and your Java code more verbose:

select a.addressKey.id from Address a

or

AddressKey addressKey = new AddressKey();
addressKey.setCountry("USA");
addressKey.setId(634);
Address a = entityManager.find(Address.class, addressKey);    

So I would personally use this for a real composite key (i.e. not with a single attribute) only.

Actually, I'm really wondering what problem you are trying to solve because at the end, you will have to deal with a Long anyway. I don't really see the added value of a single attribute typesafe primary key.

Pascal Thivent
A: 

If you are looking for a typesafe way to identify an entity, what about using its LazyLoadingProxy?

meriton