2010-02-05 105 views
2

我正在寻找一种方法来为我的实体使用Hibernate中的泛型的类型安全主键。而不是做这个休眠/ JPA类型安全主键

@Entity 
public class User{ 

@PrimaryKey 
Long id 

} 

我想这样做的......

@Entity 
public class User{ 

@PrimaryKey 
PrimaryKey<User,Long> id 

} 

或者采取类型推断更进一步......

任何想法?有人曾经尝试过吗?你可以通过让你的类可以嵌入PrimaryKey吗?

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

@PrimaryKey 
PrimaryKey<User> id; 

} 
+0

可以使用类型转换器而不是嵌入类型。但没有测试过的方法 – 2017-05-09 02:23:37

+0

7年过去了,@本州能不能请你分享经验,你最终是否用过这个,并且有帮助? – 2017-05-09 02:25:00

回答

3

虽然可以使用PK类,并把它作为与@EmbeddedId实体中的一员,这通常让你的所有JQL查询和Java代码更详细:

select a.addressKey.id from Address a 

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

所以我个人只使用一个真正的复合键(即不与单个属性)。

其实,我真的很想知道你要解决什么问题,因为最后你必须处理Long。我真的没有看到单个属性typesafe主键的附加价值。

0

如果您正在寻找类型安全的方式来识别实体,那么使用LazyLoadingProxy怎么样?