Estoy siguiendo junto con el Summer of NHibernate Screencast Series y me encuentro con una extraña excepción NHibernate.NHibernate QuerySyntaxException
NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:
Exception of type
'Antlr.Runtime.NoViableAltException' was thrown.
[select from DataTransfer.Person p where p.FirstName=:fn].
he desviado de la Serie Screencast de las siguientes maneras:
- Correr contra una base de datos compacta MS SQL Server
- estoy usando MSTest en lugar de MbUnit
I Intenté cualquier combinación de consultas siempre con el mismo resultado. Mi sintaxis CreateQuery presente
public IList<Person> GetPersonsByFirstName(string firstName)
{
ISession session = GetSession();
return session.CreateQuery("select from Person p " +
"where p.FirstName=:fn").SetString("fn", firstName)
.List<Person>();
}
Aunque no es una consulta directa este método funciona
public Person GetPersonById(int personId)
{
ISession session = GetSession();
return session.Get<Person>(personId);
}
Mi hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="BookDb">
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlServerCeDriver</property>
<property name="dialect">NHibernate.Dialect.MsSqlCeDialect</property>
<property name="connection.connection_string">Data Source=C:\Code\BookCollection\DataAccessLayer\BookCollectionDb.sdf</property>
<property name="show_sql">true</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<mapping assembly="DataTransfer"/>
</session-factory>
</hibernate-configuration>
Person.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DataTransfer" namespace="DataTransfer">
<class name="DataTransfer.Person,DataTransfer" table="Person">
<id name="PersonId" column="PersonId" type="Int32" unsaved-value="0">
<generator class="native"/>
</id>
<property name="FirstName" column="FirstName" type="String" length="50" not-null="false" />
<property name="LastName" column="LastName" type="String" length="50" not-null="false" />
</class>
</hibernate-mapping>
hizo el cambio a * * Person.hbm.xml en vano. Usted indica que la prueba y el error es una forma de resolver los extraños errores del analizador de NHibernate, ¿qué tipo de pruebas debo hacer? – ahsteele
Seleccionado cambiado para simplemente "seleccionar de DataTransfer.Person p" y recibido el mismo error. Estoy usando Build 2.1.0 de NHibernate. ¿Estás usando una base de datos MS SQL Server Compact? La única otra diferencia que puedo ver entre nuestro trabajo es que está siendo más explícito sobre el ensamblado NHibernateTests en * User.hbm.xml *. ¿Otros pensamientos? – ahsteele
¿Intentó dejar el seleccionar solo: "de Persona" (es legítimo en hql)? En realidad estoy probando contra sqlite pero dudo que importe ya que el analizador antlr trabaja para generar la consulta y si la base de datos era el problema, obtendría una sqlexception – sirrocco