流畅的NHibernate引用复合键

时间:2016-05-16 11:30:52

标签: nhibernate fluent composite-key

想象一下四个表: A B C D A 表的主键是 ID_A B 表的主键是 ID_B C 表具有复合主键( ID_A,ID_B )。 D 表引用了所有其他三个表,并在两个 ID_A ID_B 列上有三个外键。从 D 表到 B C 表的引用是可选的。

class Animal {
    public $_type;
    public $_breed;

    public function __construct ($t, $b) {
        echo "i have initialized<br/>";

        $this->_type = $t; 
        $this->_breed = $b;

        //You have to use '$this' keyword to access
        //class attibutes:
        echo "type is " . $this->_type . "<br/>";
        echo "breed is " . $this->_breed . "<br/>";
    }

    public function __destruct () {
        echo "i am dying";
    }
}

我将 D 表的映射声明为:

A             B             C             D
-------       -------       -------       -------
ID_A          ID_B          (ID_A,ID_B)   
     <--------------------- ID_A
                  <-------- ID_B          
     <----------------------------------- ID_A
                  < - - - - - - - - - - - ID_B
                                 < - - - -(ID_A,ID_B)

问题:在尝试从 D 表中选择行时,我得到 ORA-00918:列模糊定义,因为Nhibernate提到在生成的SQL查询中,ID_A ID_B 列两次。

问题:我应该如何为 D 表指定映射?

1 个答案:

答案 0 :(得分:0)

在这种情况下,我只是在D中映射C,A和B在C中映射,因此您可以从D导航到A或B到C。

根据我的经验,在这种情况下尝试捷径并没有带来任何好处,并且造成了太多问题(不值得麻烦)。 (也许我甚至没有实现一个实际功能的“捷径”。)