gpt4 book ai didi

NHibernate 与共享复合键的关系

转载 作者:行者123 更新时间:2023-12-03 18:04:03 25 4
gpt4 key购买 nike

我有两个带有复合键的表和它们之间的链接表,如下所示:

  • 一种
  • 援助(PK)
  • 共享 key (PK)

  • 出价(PK)
  • 共享 key (PK)
  • 链接
  • 援助
  • 出价
  • 共享 key
  • 排序

  • 所以尴尬的是共享 key ,它是两个 FK 的一部分。这是我尝试的第一件事(我使用的是 Fluent,但 XML 映射也会遇到同样的问题):
    mapping.HasManyToMany(x => x.Bees)
    .Table("Linking")
    .ParentKeyColumns.Add("aid", "sharedkey")
    .ChildKeyColumns.Add("bid", "sharedkey")
    .OrderBy("sortorder");

    这给了我一个映射异常:“集合映射中的重复列”,因为我输入了 sharedkey两次。这是有道理的,因为我还没有在 NH 告诉我我真的想要 sharedkey在每个方向上都相同。

    Java 版本的 Hibernate 有一个 formula feature这完全解决了这个问题,但 NH,AFAIK,没有。那么我该如何映射呢?

    一些警告:
  • 在 Fluent 中这并不是完全必要的。 XML 也可以
  • 这都是只读的,所以如果解决方案以某种有趣的方式中断插入,那很好
  • 我根本无法更改数据库
  • 最佳答案

    一个骇人听闻的解决方案可能是

    public AMap()
    {
    CompositeId()
    .KeyProperty(x => x.Id, "aid")
    .KeyProperty(x => x.Name, "sharedkey");

    HasManyToMany(x => x.Bees)
    .Table("Linking")
    .ParentKeyColumns.Add("aid", "sharedkey")
    .ChildKeyColumn("bid").ChildPropertyRef("Id")
    .OrderBy("sortorder")
    ;
    }

    public BMap()
    {
    CompositeId()
    .KeyProperty(x => x.Id, "bid")
    .KeyProperty(x => x.Name, "sharedkey");

    Map(x => x.Id, "bid")
    .Not.Insert();
    }

    要获得所有 B,这将导致(伪 sql):
    SELECT l.bid FROM a LEFT JOIN linking l ON a.aid = l.aid AND a.sharedkey = l.sharedkey WHERE a.aid = ?

    这将在给定的帮助和相同的共享 key 下获得所有 B。

    关于NHibernate 与共享复合键的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271415/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com