Pergunta

Por favor, desculpe a minha ignorância sobre o tema, como eu sou relativamente novo para Hibernate / NHibernate, mas eu encontrei um mapeamento eu não consigo descobrir:

Este é o meu banco de dados de mesa parece com:

<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>

Existe uma maneira de mapear um one-to-one com uma cláusula WHERE?

Assim, um objeto BinContent pode ter ItemType de qualquer vídeo ou clipe. Estes são introduzidos como cordas, e eu não posso mudar isso infelizmente.

Então, se o campo ItemType diz "VIDEO", eu gostaria de ter um Muitos To-One-objeto "Video", No entanto, se o campo ItemType diz "CLIP", eu gostaria de ter um muitos-para-um clipe.

Ajuda!

Eu nem tenho certeza se eu quiser usar um muitos-para-um neste caso. Talvez um One-To-One?

Foi útil?

Solução

Parece-me que você tem um candidato para a herança. Se você tem um tipo de base abstrata de BinContents, tem uma classe derivada de VideoBinContents, que contém apenas um mapeamento de vídeo, ee um ClipBinContents que contém apenas um mapeamento Clip. Seu itemtype é o seu discriminador. Dê uma olhada aqui para mais: http://www.hibernate.org /hib_docs/reference/en/html/inheritance.html

Outras dicas

Não foi possível você tem dois objetos de vídeo e clipe na sua classe e apenas certifique-se de que ambos não são preenchidos ao mesmo tempo? Pode precisar de mais alguma informação de você, como sua estrutura de classe atual. Além disso, existe só vai ser um vídeo por objeto Bin e vice-versa?

Talvez isso é mais complicado do que o que você está procurando, mas parece que talvez você poderia configurar uma classe base para as suas caixas e têm sub classes de vídeo ou clipe. Usando a tabela por hierarquia de classes de herança, você pode usar a estrutura da tabela existente.

Fazendo isso lhe permitiria fornecer mapeamentos diferentes para cada classe de sub.

Você poderia dar uma olhada no qualquer mapeamento. Com a 'qualquer' mapeamento, você pode definir uma associação polimórfica.

Verifique este (ponto 5.2.4)

De qualquer forma, não estou familiarizado com o seu 'eu domínio', mas acho que Jim tem um ponto também. Talvez você deve rever o seu datamodel e domainmodel (se possível), e ver se algum tipo de herança não é apropriado aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top