想象一下四个表: 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 表指定映射?
答案 0 :(得分:0)
在这种情况下,我只是在D中映射C,A和B在C中映射,因此您可以从D导航到A或B到C。
根据我的经验,在这种情况下尝试捷径并没有带来任何好处,并且造成了太多问题(不值得麻烦)。 (也许我甚至没有实现一个实际功能的“捷径”。)