NHibernate:如何选择单个子父(知道childID)?

时间:2011-11-06 21:57:00

标签: nhibernate select

  1. 我想将child添加到父级。在哪一点上,我知道的孩子的新身份证?我可以在DB插入之前访问它吗?我的ID生成器是HILO。我问的原因是父对象的副本需要传播到另一个应用程序。了解这一点可能会让我无法访问数据库,只是为了发现新插入的Child的ID是什么,因为我已经拥有了所有其他信息。

  2. 如果1)无法完成w / out往返DB,那么(插入后)如何选择仅有子项的父项?父母可能有多个孩子,但我只对那个孩子的父母感兴趣。这对我来说不太合适:

    parent = session.QueryOver()            .LIST()            .Where(p => p.Children.Select(c => c.Id == ChildId).First())。First();

  3. 我想要的SQL等价物是:

    select Parent.Id, Children.* From Parent
        join Children on Parent.Id = Children.ParentId
        where ChildId = 1540096
    

1 个答案:

答案 0 :(得分:1)

Session.Save(YourObject)上,将为您的对象填充ID。但是,这不会导致立即插入数据库。实际插入将在会话刷新(Transaction.Commit等)上发生。

除此之外,使用您当前的方法,您可能会传播可能无法映射到现有对象的Id。例如,假设您在插入之前传播Id,然后插入因任何原因而失败。如何应对这种不一致的状态?谨防这种情况和类似情况。

我对你的建议是不要传播可能无效的国家。