Castle Active RecordとNHibernateを使用しており、セッションを使用せずにHQL更新を実行できる必要があります。セッションを使用すると、ロックの問題が発生します。
public static ISession GetSession(out ISessionFactoryHolder factoryHolder, out bool created)
{
created = false;
var type = typeof(T);
factoryHolder = ActiveRecordMediator.GetSessionFactoryHolder();
ISessionScope activeScope = factoryHolder.ThreadScopeInfo.GetRegisteredScope();
ISession session = null;
var key = factoryHolder.GetSessionFactory(type);
if (activeScope == null)
{
created = true;
session = factoryHolder.CreateSession(type);
}
else
{
if (activeScope.IsKeyKnown(key))
session = activeScope.GetSession(key);
else
session = factoryHolder.GetSessionFactory(type).OpenSession();
}
return session;
}
public static void UpdateQuery(string query)
{
ISessionFactoryHolder factoryHolder;
var created = false;
var session = GetSession(out factoryHolder, out created);
session.CreateQuery(query).ExecuteUpdate();
if (created)
factoryHolder.ReleaseSession(session);
}
これは、セッションから発生するすべてのロックが原因で、本番環境で重大な問題を引き起こしています。セッションをインスタンス化せずにhql更新を実行するにはどうすればよいですか?