Представьте четыре таблицы: , B, C и D. Основной ключ A стол ID_A. Основной ключ B стол ID_B. C таблица имеет составной первичный ключ (ID_A, ID_B). D таблица ссылается на все три другие таблицы и имеет три внешних ключа на двух ID_A и ID_B столбцы. Ссылки от D таблица B и до C таблицы являются необязательными.Свободно NHibernate ссылка на композитный ключ
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 таблицы как:
mapping.References(e => e.A).Column("ID_A");
mapping.References(e => e.B).Column("ID_B");
mapping.References(e => e.C).Columns("ID_A", "ID_B");
Проблема: при попытке выбрать строки из D таблицы я получил ORA-00918: колонка двусмысленно определяется потому что Nhibernate упомянул ID_A и ID_B столбцы два раза в сгенерированном SQ L запрос.
Вопрос: Как указать сопоставления для D таблица?
Фредерик, хороший совет. К сожалению, это не подходит в моей ситуации, так как ** D.ID_B ** является нулевым, а ссылки с ** D ** на ** B ** и ** C ** являются необязательными. Я обновил вопрос. – user2291296
Ну, тогда у меня остается только классический совет: избегайте сложного ключа как можно больше, вместо этого используйте суррогатный ключ. Таким образом, у вас будет столбец C внешнего ключа с нулевым значением в D и его внешний ключ. B внешний ключ больше не должен быть полезным в D. –