Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 休眠第二id_Spring_Hibernate_Primary Key - Fatal编程技术网

Spring 休眠第二id

Spring 休眠第二id,spring,hibernate,primary-key,Spring,Hibernate,Primary Key,是否可以在hibernate中定义两个键,这样我就可以用这两个键访问一级缓存 @Entity class User { @Id int id; @Id String username; } 因此session.get(User.class,'harry')与session.get(User.class,1)相同 有可能吗?简短回答:没有 详细回答:有@naturaid注释可以做一点,但是hibernate只有一个id。您可以使用字典实现自己的功能。您可能对4.1的功能感兴趣

是否可以在hibernate中定义两个键,这样我就可以用这两个键访问一级缓存

@Entity
class User {
  @Id
  int id;

  @Id
  String username;
}
因此session.get(User.class,'harry')与session.get(User.class,1)相同


有可能吗?

简短回答:没有


详细回答:有@naturaid注释可以做一点,但是hibernate只有一个id。您可以使用字典实现自己的功能。

您可能对4.1的功能感兴趣


实际上,您可以使用@Id或@naturaid访问一级缓存。请确保您使用的是4.1.x。

请参阅@Fidrizers。op要求提供两个ID,它们本身是唯一的,而不是在一起,这排除了复合ID。谢谢,这与Firo的链接相同,效果很好,幸运的是,我已经升级了我的hibernate版本。它们是非常不同的链接@firos link指的是2009年的一篇博客文章,其中谈到了不检查二级缓存是否过期——这不会影响会话缓存。我发布的链接提到了新的功能,当你使用自然id时,它会命中会话缓存。我尝试了Firo的例子,但是当用标准查询自然id时,hibernate建议使用“session.byNaturalId”,所以我使用了这个。还有什么不同吗?我不太清楚你在问什么。使用session.byd将确保命中一级缓存。这不是你想要的吗?使用查询永远不会命中一级缓存。嗨,是的,现在一切都好了,这正是我想要的。我只是想告诉你,我已经带着“session.bynaturaid”来到了解决方案,因为在查询它时hibernate的日志消息。谢谢