We've been using NHibernate 1.0 wrap in a couple classes so it can be stored in HTTPContext. We also run under .Net 2.0.
We were using is fine for month until we release to production. Every couple of days we start getting "incorrect syntax near" exceptions. Once the exceptions begin we have to do an IIS Reset to clear them. The full query is contained below but I'll pull out the faulty snippet here:
explicitmo0_.EnterpriseUserID as 3_1016789_1_,
explicitmo0_.EnterpriseModuleID as 2_1016789_1_,
As you see the alias are missing the fragment column name and they begin with a number.
Any help on this would be greatly appreciated.
Hibernate version:
1.0
Mapping documents:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" >
<class name="Isaf.Identity.EnterpriseUser, Isaf" table="Isim..EnterpriseUser" connection="Isim" >
<id name="ID" type="Guid" unsaved-value="2B39D2CB-BB19-4742-B747-4842A5569F36">
<column name="EnterpriseUserID" sql-type="uniqueidentifier" not-null="true" unique="true" index="PK_EnterpriseUser" />
<generator class="guid.comb" />
</id>
<property name="UserName" type="String">
<column name="UserName" sql-type="varchar" not-null="true" unique="false" />
</property>
<property name="Password" type="String">
<column name="Password" sql-type="varchar" not-null="true" unique="false" />
</property>
<property name="Salt" type="String">
<column name="Salt" sql-type="varchar" not-null="true" unique="false" />
</property>
<property name="Email" type="String">
<column name="Email" sql-type="varchar" not-null="false" unique="false" />
</property>
<property name="SecretEmail" type="String">
<column name="SecretEmail" sql-type="varchar" not-null="false" unique="false" />
</property>
<property name="Phone" type="String">
<column name="Phone" sql-type="varchar" not-null="false" unique="false" />
</property>
<property name="DsnPhone" type="String">
<column name="DsnPhone" sql-type="varchar" not-null="false" unique="false" />
</property>
<property name="FirstName" type="String">
<column name="FirstName" sql-type="varchar" not-null="false" unique="false" />
</property>
<property name="MiddleName" type="String">
<column name="MiddleName" sql-type="varchar" not-null="false" unique="false" />
</property>
<property name="LastName" type="String">
<column name="LastName" sql-type="varchar" not-null="false" unique="false" />
</property>
<property name="PasswordExpiresOn" type="ICC.Persistence.NullDateTime, ICC.Persistence">
<column name="PasswordExpiresOn" sql-type="datetime" not-null="false" unique="false" />
</property>
<property name="Locked" type="Boolean" insert="false" update="false">
<column name="Locked" sql-type="bit" not-null="false" unique="false" />
</property>
<property name="PasswordRetryCount" type="Byte">
<column name="PasswordRetryCount" sql-type="tinyint" not-null="false" unique="false" />
</property>
<property name="PasswordRetryResetsOn" type="ICC.Persistence.NullDateTime, ICC.Persistence">
<column name="PasswordRetryResetsOn" sql-type="datetime" not-null="true" unique="false" />
</property>
<property name="PasswordRetryLocked" type="Boolean">
<column name="PasswordRetryLocked" sql-type="bit" not-null="false" unique="false" />
</property>
<property name="AdminLocked" type="Boolean">
<column name="AdminLocked" sql-type="bit" not-null="false" unique="false" />
</property>
<property name="encryptedSsn" type="String" access="field" >
<column name="Ssn" sql-type="varchar" not-null="false" unique="false" />
</property>
<property name="IsInRegistration" type="Boolean">
<column name="IsInRegistration" sql-type="bit" not-null="false" unique="false" />
</property>
<property name="RegistrationApproved" type="Boolean">
<column name="RegistrationApproved" sql-type="bit" not-null="false" unique="false" />
</property>
<property name="CreatedOn" type="ICC.Persistence.NullDateTime, ICC.Persistence" insert="false" update="false">
<column name="CreatedOn" sql-type="datetime" not-null="false" unique="false" />
</property>
<property name="ModifiedOn" type="ICC.Persistence.NullDateTime, ICC.Persistence">
<column name="ModifiedOn" sql-type="datetime" not-null="false" unique="false" />
</property>
<property name="Active" type="Boolean">
<column name="Active" sql-type="bit" not-null="false" unique="false" />
</property>
<bag name="ModuleUserAdmins" inverse="true" lazy="true">
<key column="EnterpriseUserID"/>
<one-to-many class="Isaf.Security.ModuleUserAdmin, Isaf"/>
</bag>
<bag name="Roles" table="EnterpriseUserRole" lazy="true">
<key column="EnterpriseUserID" />
<many-to-many class="Isaf.Security.Role, Isaf" column="RoleID" />
</bag>
<bag name="Versions" table="EnterpriseUserVersion" cascade="none" order-by="EffectiveDate desc" lazy="true">
<key column="EnterpriseUserID" />
<one-to-many class="Isaf.Identity.EnterpriseUserVersion, Isaf" />
</bag>
<bag name="ExplicitModulePermissions" inverse="true" lazy="true">
<key column="EnterpriseUserID"/>
<one-to-many class="Isaf.Security.ModulePermission, Isaf"/>
</bag>
<bag name="UserModuleRegistrations" inverse="true" lazy="true">
<key column="EnterpriseUserID"/>
<one-to-many class="Isaf.Registration.UserModuleRegistration, Isaf"/>
</bag>
<many-to-one name="ParentOrganization" class="Isaf.Identity.ParentOrganization, Isaf">
<column name="ParentOrganizationID" sql-type="uniqueidentifier" not-null="false"/>
</many-to-one>
<many-to-one name="Paygrade" class="Isaf.Identity.Paygrade, Isaf">
<column name="PaygradeID" sql-type="uniqueidentifier" not-null="false"/>
</many-to-one>
<many-to-one name="Salutation" class="Isaf.Identity.Salutation, Isaf">
<column name="SalutationID" sql-type="uniqueidentifier" not-null="false"/>
</many-to-one>
<many-to-one name="Rank" class="Isaf.Identity.Rank, Isaf">
<column name="RankID" sql-type="uniqueidentifier" not-null="false"/>
</many-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" >
<class name="Isaf.Security.Role, Isaf" table="Isim..Role" connection="Isim" >
<id name="ID" type="Guid" unsaved-value="2B39D2CB-BB19-4742-B747-4842A5569F36">
<column name="RoleID" sql-type="uniqueidentifier" not-null="true" unique="true" index="PK_Role" />
<generator class="guid.comb" />
</id>
<property name="Name" type="String">
<column name="Name" sql-type="varchar" not-null="true" unique="false" />
</property>
<!--
<bag name="Users" table="EnterpriseUserRole" lazy="true">
<key column="RoleID" />
<many-to-many class="Isaf.Identity.EnterpriseUser, Isaf" column="EnterpriseUserID" />
</bag>
-->
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" >
<joined-subclass name="Isaf.Security.BuiltinRole, Isaf" table="Isim..BuiltinRole" extends="Isaf.Security.Role, Isaf" connection="Isim">
<key>
<column name="RoleID" sql-type="uniqueidentifier" not-null="true" unique="true" index="PK_BuiltinRole" />
</key>
</joined-subclass>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" >
<joined-subclass name="Isaf.Security.ModuleRole, Isaf" table="Isim..ModuleRole" extends="Isaf.Security.Role, Isaf" connection="Isim">
<key>
<column name="RoleID" sql-type="uniqueidentifier" not-null="true" unique="true" index="PK_ModuleRole" />
</key>
<property name="EnterpriseModuleID" type="ICC.Persistence.NullGuid, ICC.Persistence" insert="false" update="false">
<column name="EnterpriseModuleID" sql-type="uniqueidentifier" not-null="false" unique="false" />
</property>
<property name="ModuleManaged" type="Boolean">
<column name="ModuleManaged" sql-type="bit" not-null="false" unique="false" />
</property>
<many-to-one name="EnterpriseModule" class="Isaf.EnterpriseModule, Isaf">
<column name="EnterpriseModuleID" sql-type="uniqueidentifier" not-null="false"/>
</many-to-one>
</joined-subclass>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():
It's happening on a Lazy Loaded property.
ISession session = factory.OpenSession();
if(null!=factory)
{
factory.Close();
}
Full stack trace of any exception that occurs:
System.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '3'.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
at NHibernate.Impl.BatcherImpl.ExecuteReader(IDbCommand cmd)
at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, RowSelection selection, ISessionImplementor session)
2006-10-26 14:51:33,561 [424] WARN NHibernate.Util.ADOExceptionReporter [RequestID=915c9551-874b-48da-af00-92457140017f; UserName=; SessionID=] - System.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '3'.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
at NHibernate.Impl.BatcherImpl.ExecuteReader(IDbCommand cmd)
at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, RowSelection selection, ISessionImplementor session)
Name and version of the database you are using:
The generated SQL (show_sql=true):
SELECT explicitmo0_.EnterpriseUserID as Enterpri3___, explicitmo0_.ModulePermissionID as ModulePe1___,
explicitmo0_.ModulePermissionID as ModulePe1_1_,
case when [explicitmo0__1_].ModulePermissionID is not null then 1 when [explicitmo0__2_].ModulePermissionID is not null
then 2 when explicitmo0_.ModulePermissionID is not null then 0 end as clazz_1_,
explicitmo0_.EnterpriseUserID as 3_1016789_1_,
explicitmo0_.EnterpriseModuleID as 2_1016789_1_,
enterprise1_.EnterpriseModuleID as Enterpri1_0_, enterprise1_.UserAccessPolicyID as UserAcce2_0_
FROM Isim..ModulePermission explicitmo0_
left outer join Isim..DeniedModulePermission [explicitmo0__1_] on explicitmo0_.ModulePermissionID=[explicitmo0__1_].ModulePermissionID
left outer join Isim..GrantedModulePermission [explicitmo0__2_] on explicitmo0_.ModulePermissionID=[explicitmo0__2_].ModulePermissionID
left outer join Isim..EnterpriseModule enterprise1_ on explicitmo0_.EnterpriseModuleID=enterprise1_.EnterpriseModuleID
WHERE explicitmo0_.EnterpriseUserID=@p0
Debug level Hibernate log excerpt:
Last edited by djroberts@cox.net on Thu Oct 26, 2006 5:23 pm, edited 3 times in total.
|