public void ReattachmentNaturalIdCheck()
		{
			ISession s = OpenSession();
			s.BeginTransaction();
			User u = new User("gavin", "hb", "secret");
			s.Persist(u);
			s.Transaction.Commit();
			s.Close();

			FieldInfo name = u.GetType().GetField("name",
			                                      BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
			name.SetValue(u, "Gavin");
			s = OpenSession();
			s.BeginTransaction();
			try
			{
				s.Update(u);
				s.Transaction.Commit();
			}
			catch (HibernateException)
			{
				s.Transaction.Rollback();
			}
			catch (Exception)
			{
					s.Transaction.Rollback();
			}
			finally
			{
				s.Close();
			}

			s = OpenSession();
			s.BeginTransaction();
			s.Delete(u);
			s.Transaction.Commit();
			s.Close();
		}
		public void NonexistentNaturalIdCache()
		{
			sessions.Statistics.Clear();

			ISession s = OpenSession();
			ITransaction t = s.BeginTransaction();

			object nullUser =
				s.CreateCriteria(typeof (User)).Add(Restrictions.NaturalId().Set("name", "gavin").Set("org", "hb")).SetCacheable(
					true).UniqueResult();

			Assert.That(nullUser, Is.Null);

			t.Commit();
			s.Close();

			Assert.AreEqual(1, sessions.Statistics.QueryExecutionCount);
			Assert.AreEqual(0, sessions.Statistics.QueryCacheHitCount);
			Assert.AreEqual(0, sessions.Statistics.QueryCachePutCount);

			s = OpenSession();
			t = s.BeginTransaction();

			User u = new User("gavin", "hb", "secret");
			s.Persist(u);

			t.Commit();
			s.Close();

			sessions.Statistics.Clear();

			s = OpenSession();
			t = s.BeginTransaction();

			u =
				(User)
				s.CreateCriteria(typeof (User)).Add(Restrictions.NaturalId().Set("name", "gavin").Set("org", "hb")).SetCacheable(
					true).UniqueResult();

			Assert.That(u, Is.Not.Null);

			t.Commit();
			s.Close();

			Assert.AreEqual(1, sessions.Statistics.QueryExecutionCount);
			Assert.AreEqual(0, sessions.Statistics.QueryCacheHitCount);
			Assert.AreEqual(1, sessions.Statistics.QueryCachePutCount);

			sessions.Statistics.Clear();

			s = OpenSession();
			t = s.BeginTransaction();

			u =
				(User)
				s.CreateCriteria(typeof (User)).Add(Restrictions.NaturalId().Set("name", "gavin").Set("org", "hb")).SetCacheable(
					true).UniqueResult();

			s.Delete(u);

			t.Commit();
			s.Close();

			Assert.AreEqual(0, sessions.Statistics.QueryExecutionCount);
			Assert.AreEqual(1, sessions.Statistics.QueryCacheHitCount);

			sessions.Statistics.Clear();

			s = OpenSession();
			t = s.BeginTransaction();

			nullUser =
				s.CreateCriteria(typeof (User)).Add(Restrictions.NaturalId().Set("name", "gavin").Set("org", "hb")).SetCacheable(
					true).UniqueResult();

			Assert.That(nullUser, Is.Null);

			t.Commit();
			s.Close();

			Assert.AreEqual(1, sessions.Statistics.QueryExecutionCount);
			Assert.AreEqual(0, sessions.Statistics.QueryCacheHitCount);
			Assert.AreEqual(0, sessions.Statistics.QueryCachePutCount);
		}
		public void Querying()
		{
			ISession s = OpenSession();
			ITransaction t = s.BeginTransaction();

			User u = new User("emmanuel", "hb", "bh");
			s.Persist(u);

			t.Commit();
			s.Close();

			s = OpenSession();
			t = s.BeginTransaction();

			u = (User) s.CreateQuery("from User u where u.name = :name").SetParameter("name", "emmanuel").UniqueResult();
			Assert.AreEqual("emmanuel", u.Name);
			s.Delete(u);

			t.Commit();
			s.Close();
		}