有没有办法用where子句映射一对一?

时间:2009-01-21 20:23:37

标签: nhibernate hibernate nhibernate-mapping hibernate-mapping

请原谅我对这个主题的无知,因为我对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对象可以具有VIDEO或CLIP的ItemType。这些作为字符串键入,不幸的是我不能改变它。

因此,如果ItemType字段显示“VIDEO”,我想要一个多对一的“视频”对象, 但是,如果ItemType字段显示“CLIP”,我想要一个多对一的剪辑。

帮助!

在这种情况下,我甚至不确定是否要使用“多对一”。也许一对一?

4 个答案:

答案 0 :(得分:4)

听起来像你有继承候选人。如果你有一个BinContents的抽象基类型,有一个VideoBinContents的派生类,它只包含一个Video映射,还有一个只包含Clip映射的ClipBinContents。您的itemtype是您的鉴别器。请查看此处了解更多信息:http://www.hibernate.org/hib_docs/reference/en/html/inheritance.html

答案 1 :(得分:0)

您的班级中是否同时拥有视频和剪辑对象,并确保两者都不会同时填充?可能需要您提供更多信息,例如您当前的类结构。另外,每个Bin对象只有一个视频,反之亦然吗?

答案 2 :(得分:0)

也许这比你想要的更复杂,但似乎你可以为你的箱子设置一个基类,并有子类的视频或剪辑。使用每个类继承层次表,您可以使用现有的表结构。

这样做可以为每个子类提供不同的映射。

答案 3 :(得分:0)

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

检查this (paragraph 5.2.4)

无论如何,我不熟悉你的“域名”,但我认为Jim也有一点意见。也许你应该检查一下你的datamodel和domainmodel(如果可能的话),看看这里的某种继承是不合适的。