Hi,
I am having some issues when executing a stored procedure using NHibernate. The sp is supposed to increment a number in a row, and return the new number. The reason for using a stored procedure has to do with the fact that some checks have to be made in the database prior to the number being generated.
The problem is that the procedure seems to be executed twice, giving me every other number back. The NHibernate debug output supports this.
Any ideas?
Hibernate version: 1.2.1.4000
Mapping documents:
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Lancelot" namespace="Lancelot.Entities">
<class name="Reservation" table="tbl_reservation">
<id name="ReservationID" column="reservationID" type="int">
<generator class="native" />
</id>
<property name="Year" column="year" type="int" />
<property name="Number" column="number" type="int" />
</class>
<sql-query name="sp_reserveNumber">
<return alias="reservation" class="Reservation">
<return-property name="Year" column="year" />
<return-property name="Number" column="number" />
<return-property name="ReservationID" column="reservationID" />
</return>
exec sp_reserveNumber
</sql-query>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():Code:
IQuery query = HibernateManager.Instance.Session.GetNamedQuery("sp_reserveNumber");
query.SetCacheable(false);
Reservation reservation = query.UniqueResult<Reservation>();
HibernateManager.Instance.Transaction.Commit();
HibernateManager.Instance.Session.Evict(reservation);
Name and version of the database you are using:
MS SQL Server 9.0.3042.
The generated SQL (show_sql=true):
NHibernate: exec sp_reserveNumber
NHibernate: exec sp_reserveNumber