请原谅我对这个主题的无知,因为我对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”,我想要一个多对一的剪辑。
帮助!
在这种情况下,我甚至不确定是否要使用“多对一”。也许一对一?
答案 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”映射,您可以定义多态关联。
无论如何,我不熟悉你的“域名”,但我认为Jim也有一点意见。也许你应该检查一下你的datamodel和domainmodel(如果可能的话),看看这里的某种继承是不合适的。