Hi!
nHibernate version 1.0.2.0
I am trying to use workaround provided here
http://forum.hibernate.org/viewtopic.php?t=938218 as workaround for the problem of '
mapping the association from the entity class to the subclass by specifying (1) a many-to-one association to the named subclass in the entity class's mapping, and (2) having a single column in the entity class's table, which contains the subclass-specific id of the associated subclass instance'.
Workaround proposed was to use fixed value for a discriminator column, e.g.
<many-to-one name="Country" class="Country">
<column name="'C'"/>
<column name="Country" />
</many-to-one>
But I am receiving an exception, which looks like an nhibernate bug:
Code:
[SqlException (0x80131904): Incorrect syntax near 'C'.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +95
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +82
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +346
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +3244
System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +52
System.Data.SqlClient.SqlDataReader.get_MetaData() +130
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +371
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +1121
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +334
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +45
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +162
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +35
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() +29
NHibernate.Impl.BatcherImpl.ExecuteReader(IDbCommand cmd) +92
NHibernate.Loader.Loader.GetResultSet(IDbCommand st, RowSelection selection, ISessionImplementor session) +238
NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Object optionalObject, Object optionalId, Object[] optionalCollectionKeys, Boolean returnProxies) +354
NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Object optionalObject, Object optionalId, Object[] optionalCollectionKeys, Boolean returnProxies) +89
NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) +45
NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet querySpaces, IType[] resultTypes) +344
NHibernate.Hql.QueryTranslator.List(ISessionImplementor session, QueryParameters queryParameters) +112
NHibernate.Impl.SessionImpl.Find(String query, QueryParameters parameters) +265
[ADOException: Could not execute query]
NHibernate.Impl.SessionImpl.Find(String query, QueryParameters parameters) +327
NHibernate.Impl.SessionImpl.Find(String query, Object[] values, IType[] types) +62
NHibernate.Impl.SessionImpl.Find(String query) +45
MXL.DataAccess.HttpDAL`1.Find(String query) in C:\source\eMin5\eMinerva\MXL.DataAccess\HttpDAL.cs:216
MXL.Business.Services.StudentService.Find(String query) in C:\source\eMin5\eMinerva\MXL.Business.Services\StudentService.cs:56
eMinerva.Business.DataSources.StudentDataSource.Search(String value, String sortParameter) in ...\StudentDataSource.cs:50
...
The part of a query throws an exception looks like this:
select Address.City,
Address.'C', Address.Country from ...
e.g. using fixed value with alias, which raises an exception on an SQL Server.
Is it a bug in nHibernate? Is there another workaround for this problem?
Using proposed <formula>'C'</formula> raises a mapping exception.