通常,当您为类的某个属性定义映射时,NHibernate会在获取属性后立即将值保存在属性中。要么在获取对象时立即获取它,要么在第一次调用属性的getter时被懒惰地加载,但是一旦从数据库加载它就会被提取。
如果我错了,请纠正我。
是否可以配置映射,以便对同一个getter的每次单独调用都会导致NHibernate转到数据库并再次读取该值?
背景:我有一个表和一个相应的类ExcelFile
来管理某些Excel文件的路径和元数据。每个ExcelFile
对象代表一个文件。
ExcelFile
包含属性IsLocked
,LockedBy
和DateLocked
,目的是在有人处理文件时锁定该文件。一旦他关闭文件,就会释放锁定。
缓存这些属性可能会引入竞争条件:
IsLocked
。这是假的。 NHibernate缓存了这个值。IsLocked
,然后设置锁定。IsLocked
的{{1}}。所以他设置锁并打开应用程序。为了设置锁,我可以使用本机SQL查询直接写入数据库的方法。到目前为止,我一直在阅读这些属性。
但是我需要查询使用HQL设置false
的条目。简单地读取和写入相应表字段的方法的编码也引入了映射逻辑抵抗的第二个位置,这不是很好。
答案 0 :(得分:1)
你可能会这样做,我听说nHibernate现在支持延迟加载属性,这是朝这个方向迈出的一步。
但话虽如此,你仍然会有竞争条件。避免竞争条件的一种方法如下: