problema com a coluna com versão anulável

12 views
Skip to first unread message

Luis Silva

unread,
Aug 6, 2019, 7:15:11 AM8/6/19
to NHibernate-Br

Estou tendo um grande problema, estou criando uma integração de banco de dados e estou usando nhibernate pois já tenho um ótimo conhecimento, mas o sistema legado que faz a persistência usa o ORM XPO que usa uma coluna para concorrência, até agora tão bom, mas é anulável eo valor padrão na inserção é NULL e nas próximas atualizações ele irá incrementar, iniciar em NULL e ir para 0,1,2 e assim por diante. No entanto eu estou usando nhibernate quando ele vai autalizar um valor nulo do erro de valor nulo, porque ele não pode incrementar um valor nulo, até agora tão bom, eu implementei uma classe que herda de IUserVersionType e sobrescreveu o método NEXT, tudo funcionou corretamente, no entanto na geração de consultas ainda continua com erro porque na geração de consultas pelo próprio nhibernate.

public class MyVersion : NHibernate.UserTypes.IUserVersionType
{
   public object Next(object current, ISessionImplementor session)
   {
      if (current==null)
      {
         return 0;
      }
      return ((int)current) + 1;
    }
}
O código que nhibernate gera é o sql mostrado, como você pode ver o parâmetro p0 foi resolvido com a classe e o método NEXT, mas no parâmetro p6 ele faz a comparação com null o que está errado, foi fazer [é nulo] porque valor não pode ser comparado a nulo
UPDATE
        table 
    SET
        OptimisticLockField = @p0,
        a = @p1,
        b = @p2,
        c = @p3,
        d = @p4 
    WHERE
        e = @p5 
        AND OptimisticLockField = @p6;
    @p0 = 0 [Type: Int32 (0:0:0)], @p1 = '851' [Type: AnsiString (8000:0:0)], @p2 = 2015-09-23T00:00:00.0000000 [Type: DateTime (0:0:0)], @p3 = '12' [Type: AnsiString (8000:0:0)], @p4 = 2015-09-23T12:53:24.0000000 [Type: DateTime (0:0:0)], @p5 = 108 [Type: Int64 (0:0:0)], @p6 = NULL [Type: Int32 (0:0:0)]
qualquer sugestão sobre como proceder porque eu não queria usar outro orm.

Estou usando o FluentNHibernate 2.1.2 e o NHibernate 5.2.5

public class DbDtoBase<T>
{
    public virtual int? OptimisticLockField { get; set; }
}
 public class table: DbDtoBase<Table>
 {
     public virtual long e { get; set; }
     public virtual string a { get; set; }
     public virtual DateTime  b { get; set; }
     public virtual string c { get; set; }
     public virtual DateTime d { get; set; }
 }

André Silva

unread,
Aug 8, 2019, 9:41:48 PM8/8/19
to Nhibernate Br
Já faz um tempo que utilizei NHibernate, então vou tentar ajudar por outro caminho.
Pode tornar a coluna de versão como NOT NULL DEFAULT 0? (ou outro valor inicial)
Se houver valores nulos atualmente faça um update pra definir a versão inicial antes de tornar not null.
Pode ser um provável bug com IUserTypeVersion?

--
André Silva Rodrigues



--
Você recebeu essa mensagem porque está inscrito no grupo "NHibernate-Br" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nhibernate-b...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/nhibernate-br/2b2b35bb-f3f4-4992-9772-305a6d238053%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages