Есть ли способ сопоставить один-к-одному с предложением где? - PullRequest
0 голосов
/ 21 января 2009

Прошу прощения за мое незнание этой темы, поскольку я относительно новичок в Hibernate / NHibernate, но я столкнулся с отображением, которое не могу понять:

Вот как выглядит моя таблица базы данных:

<bincontents> 
  <id>5873715</id> 
  <title>Video Title</title> 
  <sortorder>0</sortorder> 
  <itemid>23079</itemid> 
  <itemtype>VIDEO</itemtype> 
</bincontents> 
<bincontents> 
  <id>5873716</id> 
  <title>Clip Title</title> 
  <sortorder>1</sortorder> 
  <itemid>131854</itemid> 
  <itemtype>CLIP</itemtype> 
</bincontents>

Есть ли способ сопоставить один-к-одному с предложением where?

Таким образом, объект BinContent может иметь ItemType либо VIDEO, либо CLIP. Они обозначены как строки, и я не могу это изменить, к сожалению.

Так что, если в поле ItemType указано «VIDEO», я бы хотел иметь объект «Видео» «Много-к-одному», Однако, если в поле ItemType указано «CLIP», я хотел бы иметь клип «Многие к одному».

Помощь!

Я даже не уверен, хочу ли я в этом случае использовать «многие в один». Возможно, один на один?

Ответы [ 4 ]

4 голосов
/ 21 января 2009

Мне кажется, что у вас есть кандидат на наследство. Если у вас есть абстрактный базовый тип BinContents, имейте производный класс VideoBinContents, который содержит только сопоставление Video, и ClipBinContents, который содержит только сопоставление Clip. Ваш тип предмета - ваш дискриминатор. Посмотрите здесь больше: http://www.hibernate.org/hib_docs/reference/en/html/inheritance.html

0 голосов
/ 21 января 2009

Вы можете взглянуть на любое отображение. С помощью сопоставления any вы можете определить полиморфную ассоциацию.

Отметьте это (пункт 5.2.4)

В любом случае, я не знаком с вашим «доменом», но думаю, что у Джима тоже есть смысл. Возможно, вам следует проверить свою модель данных и модель домена (если это возможно) и посмотреть, не подходит ли здесь какое-либо наследование.

0 голосов
/ 21 января 2009

Возможно, это сложнее, чем то, что вы ищете, но, возможно, вы могли бы установить базовый класс для своих корзин и иметь подклассы Video или Clip. Используя таблицу наследования иерархии классов, вы можете использовать существующую структуру таблицы.

Это позволит вам предоставить различные сопоставления для каждого подкласса.

0 голосов
/ 21 января 2009

Не могли бы вы иметь в своем классе объекты Video и Clip и просто убедиться, что они никогда не заполняются одновременно? Может потребоваться дополнительная информация от вас, такая как ваша текущая структура классов. Кроме того, будет ли только один объект Video на Bin и наоборот?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...