0

请原谅我对这个话题的无知,因为我对 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 回答 4

4

在我看来,您有继承人的候选人。如果您有一个 BinContents 的抽象基类型,则有一个 VideoBinContents 的派生类,它只包含一个视频映射,以及一个 ClipBinContents,它只包含一个剪辑映射。您的 itemtype 是您的鉴别器。在这里查看更多信息:http ://www.hibernate.org/hib_docs/reference/en/html/inheritance.html

于 2009-01-21T20:40:58.520 回答
0

难道你不能在你的类中同时拥有 Video 和 Clip 对象,并确保它们永远不会同时填充吗?可能需要您提供更多信息,例如您当前的班级结构。另外,每个 Bin 对象是否只有一个视频,反之亦然?

于 2009-01-21T20:39:56.260 回答
0

也许这比您正在寻找的更复杂,但似乎您可以为您的垃圾箱设置一个基类并拥有 Video 或 Clip 的子类。使用每个类继承层次结构的表,您可以使用现有的表结构。

这样做将允许您为每个子类提供不同的映射。

于 2009-01-21T20:43:59.887 回答
0

你可以看看 any 映射。使用“任何”映射,您可以定义多态关联。

检查这个(第 5.2.4 段)

无论如何,我不熟悉你的“领域”,但我认为吉姆也有一点。也许您应该检查您的数据模型和域模型(如果可能),看看这里是否不适合某种继承。

于 2009-01-21T20:45:03.503 回答