Hello guyz,
I'm getting an error when I try to get an object from a criteria in
NHibernate, I don't know what it can be since I can get it from the
session.Get<T>() method, but when I try to use a criteria I get an
error about the Guid format, I really need some help, please.
My hibernate.cfg.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property
name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</
property>
<property
name="connection.provider">NHibernate.Connection.DriverConnectionProvider</
property>
<property name="dialect">NHibernate.Dialect.MySQLDialect</
property>
<property
name="connection.connection_string">Server=Athenas;Database=uniflu;Uid=alaor;Pwd=test;</
property>
<property
name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory,
NHibernate.ByteCode.Castle</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
My Usuario.cs class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Uniflu.Domain
{
public class Usuario
{
public virtual Guid Id { get; set; }
public virtual String Nome { get; set; }
public virtual String Email { get; set; }
public virtual String Senha { get; set; }
public virtual String Dica { get; set; }
public virtual DateTime DataCriado { get; set; }
public virtual DateTime UltimoAcesso { get; set; }
public virtual Boolean Ativo { get; set; }
}
}
My Usuario.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Uniflu.Domain"
namespace="Uniflu.Domain">
<class name="Usuario">
<id name="Id">
<generator class="guid" />
</id>
<property name="Nome" />
<property name="Email" />
<property name="Senha" />
<property name="Dica" />
<property name="DataCriado" />
<property name="UltimoAcesso" />
<property name="Ativo" />
</class>
</hibernate-mapping>
My NHibernateHelper:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
namespace Uniflu.Domain
{
class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly(typeof
(Usuario).Assembly);
_sessionFactory = configuration.BuildSessionFactory
();
}
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
}
My Usuario Repository:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Criterion;
namespace Uniflu.Domain.Repositories
{
public class UsuarioRepository : IUsuarioRepository
{
public void Inserir(Usuario usuario)
{
using (ISession session = NHibernateHelper.OpenSession())
{
using (ITransaction transaction =
session.BeginTransaction())
{
session.Save(usuario);
transaction.Commit();
}
}
}
public void Atualizar(Usuario usuario)
{
using (ISession session = NHibernateHelper.OpenSession())
{
using (ITransaction transaction =
session.BeginTransaction())
{
session.Update(usuario);
transaction.Commit();
}
}
}
public void Remover(Usuario usuario)
{
using (ISession session = NHibernateHelper.OpenSession())
{
using (ITransaction transaction =
session.BeginTransaction())
{
session.Delete(usuario);
transaction.Commit();
}
}
}
public Usuario SelecionarPorId(Guid Id)
{
using (ISession session = NHibernateHelper.OpenSession())
{
return session.Get<Usuario>(Id);
}
}
public Usuario SelecionarPorNome(String Nome)
{
using (ISession session = NHibernateHelper.OpenSession())
{
return session.CreateCriteria(typeof(Usuario))
.Add(Restrictions.Eq("Nome", Nome))
.UniqueResult<Usuario>();
}
}
public ICollection<Usuario> BuscarPorNome(String Nome)
{
throw new NotImplementedException();
}
}
}
My tests:
using System;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using NUnit.Framework;
using Uniflu.Domain;
using Uniflu.Domain.Repositories;
[TestFixture]
public class ProductRepository_Fixture
{
private ISessionFactory _sessionFactory;
private Configuration _configuration;
[TestFixtureSetUp]
public void TestFixtureSetUp()
{
_configuration = new Configuration();
_configuration.Configure();
_configuration.AddAssembly(typeof(Usuario).Assembly);
_sessionFactory = _configuration.BuildSessionFactory();
}
[SetUp]
public void SetupContext()
{
new SchemaExport(_configuration).Execute(false, true, false);
using (ISession session = _sessionFactory.OpenSession())
{
using(ITransaction transaction = session.BeginTransaction
())
{
foreach(Usuario usuario in usuarios)
session.Save(usuario);
transaction.Commit();
}
}
}
public readonly Usuario[] usuarios = new[] {
new Usuario { Nome = "Alaor", Email =
"[email protected]" },
new Usuario { Nome = "Diego", Email = "[email protected]" },
new Usuario { Nome = "Estela", Email =
"[email protected]" },
new Usuario { Nome = "Paulo Diogo", Email =
"[email protected]" }
};
[Test]
public void Can_add_new_usuario()
{
var usuario = new Usuario { Nome = "Alaor", Email =
"[email protected]" };
IUsuarioRepository repository = new UsuarioRepository();
repository.Inserir(usuario);
using (ISession session = _sessionFactory.OpenSession())
{
var fromDB = session.Get<Usuario>(usuario.Id);
Assert.IsNotNull(fromDB);
Assert.AreNotSame(usuario, fromDB);
Assert.AreEqual(usuario.Nome, fromDB.Nome);
Assert.AreEqual(usuario.Email, fromDB.Email);
}
Console.WriteLine(usuario.Id.ToString());
}
[Test]
public void Can_update_existing_usuario()
{
var usuario = usuarios[0];
usuario.Nome = "Alaorzinho";
IUsuarioRepository repository = new UsuarioRepository();
repository.Atualizar(usuario);
// Usa session para tentar recuperar o usuário
using (ISession session = _sessionFactory.OpenSession())
{
var fromDb = session.Get<Usuario>(usuario.Id);
Assert.AreEqual(usuario.Nome, fromDb.Nome);
}
}
[Test]
public void Can_remove_existing_usuario()
{
var usuario = usuarios[0];
IUsuarioRepository repository = new UsuarioRepository();
repository.Remover(usuario);
using (ISession session = _sessionFactory.OpenSession())
{
var fromDb = session.Get<Usuario>(usuario.Id);
Assert.IsNull(fromDb);
}
}
[Test]
public void Can_get_existing_usuario_by_Id()
{
var usuario = usuarios[0];
IUsuarioRepository repository = new UsuarioRepository();
var fromDb = repository.SelecionarPorId(usuario.Id);
Assert.IsNotNull(fromDb);
Assert.AreEqual(usuario.Nome, fromDb.Nome);
Assert.AreEqual(usuario.Email, fromDb.Email);
}
[Test]
public void Can_get_existing_usuario_by_Nome()
{
var usuario = usuarios[2];
IUsuarioRepository repository = new UsuarioRepository();
var fromDb = repository.SelecionarPorNome(usuario.Nome);
Assert.IsNotNull(fromDb);
Assert.AreEqual(usuario.Nome, fromDb.Nome);
Assert.AreEqual(usuario.Email, fromDb.Email);
}
}
The last test fails, all the others passes, in the last test I get
this error message:
------ Test started: Assembly: Uniflu.Tests.dll ------
NHibernate: INSERT INTO Usuario (Nome, Email, Senha, Dica, DataCriado,
UltimoAcesso, Ativo, Id) VALUES (?p0, ?p1, ?p2, ?p3, ?p4, ?p5, ?p6, ?
p7);?p0 = 'Alaor', ?p1 = '[email protected]', ?p2 = NULL, ?p3 = NULL, ?
p4 = 01/01/0001 00:00:00, ?p5 = 01/01/0001 00:00:00, ?p6 = False, ?p7
= 182a87f6-450d-4e02-94e3-b9c07fab1fa1
NHibernate: INSERT INTO Usuario (Nome, Email, Senha, Dica, DataCriado,
UltimoAcesso, Ativo, Id) VALUES (?p0, ?p1, ?p2, ?p3, ?p4, ?p5, ?p6, ?
p7);?p0 = 'Diego', ?p1 = '[email protected]', ?p2 = NULL, ?p3 = NULL, ?p4 =
01/01/0001 00:00:00, ?p5 = 01/01/0001 00:00:00, ?p6 = False, ?p7 =
c28dc40a-ab18-4b02-9a71-708fe6094881
NHibernate: INSERT INTO Usuario (Nome, Email, Senha, Dica, DataCriado,
UltimoAcesso, Ativo, Id) VALUES (?p0, ?p1, ?p2, ?p3, ?p4, ?p5, ?p6, ?
p7);?p0 = 'Estela', ?p1 = '[email protected]', ?p2 = NULL, ?p3
= NULL, ?p4 = 01/01/0001 00:00:00, ?p5 = 01/01/0001 00:00:00, ?p6 =
False, ?p7 = 15771ad7-951b-4c78-a8d0-9a4f3b450562
NHibernate: INSERT INTO Usuario (Nome, Email, Senha, Dica, DataCriado,
UltimoAcesso, Ativo, Id) VALUES (?p0, ?p1, ?p2, ?p3, ?p4, ?p5, ?p6, ?
p7);?p0 = 'Paulo Diogo', ?p1 = '[email protected]', ?p2 = NULL, ?
p3 = NULL, ?p4 = 01/01/0001 00:00:00, ?p5 = 01/01/0001 00:00:00, ?p6 =
False, ?p7 = 309ba2b3-bbc0-4244-a5cd-7fa837cf037d
NHibernate: SELECT this_.Id as Id2_0_, this_.Nome as Nome2_0_,
this_.Email as Email2_0_, this_.Senha as Senha2_0_, this_.Dica as
Dica2_0_, this_.DataCriado as DataCriado2_0_, this_.UltimoAcesso as
UltimoAc7_2_0_, this_.Ativo as Ativo2_0_ FROM Usuario this_ WHERE
this_.Nome = ?p0;?p0 = 'Estela'
TestCase 'ProductRepository_Fixture.Can_get_existing_usuario_by_Nome'
failed: NHibernate.ADOException : could not execute query
[ SELECT this_.Id as Id2_0_, this_.Nome as Nome2_0_, this_.Email as
Email2_0_, this_.Senha as Senha2_0_, this_.Dica as Dica2_0_,
this_.DataCriado as DataCriado2_0_, this_.UltimoAcesso as
UltimoAc7_2_0_, this_.Ativo as Ativo2_0_ FROM Usuario this_ WHERE
this_.Nome = ?p0 ]
Positional parameters: #0>Estela
[SQL: SELECT this_.Id as Id2_0_, this_.Nome as Nome2_0_, this_.Email
as Email2_0_, this_.Senha as Senha2_0_, this_.Dica as Dica2_0_,
this_.DataCriado as DataCriado2_0_, this_.UltimoAcesso as
UltimoAc7_2_0_, this_.Ativo as Ativo2_0_ FROM Usuario this_ WHERE
this_.Nome = ?p0]
----> System.FormatException : GUID deve conter 32 dígitos com 4
hifens (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
em NHibernate.Loader.Loader.DoList(ISessionImplementor session,
QueryParameters queryParameters)
em NHibernate.Loader.Loader.List(ISessionImplementor session,
QueryParameters queryParameters, ISet`1 querySpaces, IType[]
resultTypes)
em NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList
results)
em NHibernate.Impl.CriteriaImpl.List(IList results)
em NHibernate.Impl.CriteriaImpl.UniqueResult()
em NHibernate.Impl.CriteriaImpl.UniqueResult[T]()
E:\Projetos\Uniflu\Uniflu\Uniflu.Domain\Repositories
\UsuarioRepository.cs(60,0): em
Uniflu.Domain.Repositories.UsuarioRepository.SelecionarPorNome(String
Nome)
E:\Projetos\Uniflu\Uniflu\Uniflu.Tests\UsuarioRepository_Fixture.cs
(123,0): em ProductRepository_Fixture.Can_get_existing_usuario_by_Nome
()
--FormatException
em System.Guid..ctor(String g)
em NHibernate.Type.GuidType.Get(IDataReader rs, Int32 index)
em NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String
name)
em NHibernate.Loader.Loader.GetKeyFromResultSet(Int32 i,
IEntityPersister persister, Object id, IDataReader rs,
ISessionImplementor session)
em NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader
resultSet, ISessionImplementor session, QueryParameters
queryParameters, LockMode[] lockModeArray, EntityKey
optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean
returnProxies)
em NHibernate.Loader.Loader.DoQuery(ISessionImplementor session,
QueryParameters queryParameters, Boolean returnProxies)
em NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections
(ISessionImplementor session, QueryParameters queryParameters, Boolean
returnProxies)
em NHibernate.Loader.Loader.DoList(ISessionImplementor session,
QueryParameters queryParameters)
0 passed, 1 failed, 0 skipped, took 20,68 seconds (NUnit 2.5).
But I can't see what's wrong with the Guid, in the test that takes it
by the Get method it works without any problems with it, so I don't
know. My error trace have some words in portuguese, the trasnlation
is: "Guid should contain 32 digits with 4 dashes", and "em" = "in".
Thankz in advance!
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---