NHibernate缓存独特的索引?

时间:2009-05-27 08:57:04

标签: nhibernate caching unique-key

我有一些类具有该对象唯一的属性,例如对于User类,属性Username永远不应该重复。

NHibernate似乎不支持通过唯一键加载对象,然后以与Load()或Get()相同的方式缓存。我说的时候我是否正确?

如果我那么我将只需要通过LoadByUniqueIndex(lambda属性,对象键)的扩展方法来自己的角色。

1 个答案:

答案 0 :(得分:1)

是的,你是对的,NH不会直接从缓存获取实体,除了id之外的任何东西。请注意,除id之外的所有内容都可能发生更改,需要在数据库中查找。

缓存时要小心。 “过早的缓存是所有邪恶的根源”或者其他什么。说真的,如果您不确定是否会出现明显的性能问题,请不要编写自己的缓存。

  • 编写将实体作为参数传递的代码,以避免多次加载同一实体。
  • 避免使用比会话更长的缓存。如果您没有通知所有更改,您将收到陈旧数据。
  • 避免使用静态的缓存,而是使用线程静态。这可以避免在会话之间共享数据,这会破坏事务隔离。
  • 如果确实需要,请使用二级缓存。

如果你认为只要应用程序运行就有一个静态缓存,我可以告诉你,你最好完全避免它。它不会在合理的努力下正常工作。