Spring 休眠第二id
是否可以在hibernate中定义两个键,这样我就可以用这两个键访问一级缓存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的功能感兴趣
@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的日志消息。谢谢