当前位置:  开发笔记 > 数据库 > 正文

麻烦在具有复合ID的类上使用nHibernate 2.0的Session.Get <T>

如何解决《麻烦在具有复合ID的类上使用nHibernate2.0的Session.Get<T>》经验,为你挑选了1个好方法。

我遇到的问题(我认为)应该很简单,但找不到任何明确的信息.

在我有三个表的情况下,描述一个人可以拥有多个作业的域:

人 - 有PersonId,姓名
工作 - 有JobId,JobName
PersonJob - 有PersonId,JobId,YearsOfEmployment

注意:在我的对象模型中,我有表示每个表的实体.我有第三个实体代表人/工作关系,因为那里有有用的元数据(YearsOfEmployment),而不仅仅是一个简单的连接表.

所以,如果我知道PersonId和JobId,有没有一种简单的方法让我使用会话并返回一个匹配那些ID的对象?

或者,换一种方式,因为我已经知道主键是有一种脑死亡,简单的方法,我可以将SQL"SELECT YearsOfEmployment from PersonJob WHERE PersonId = 1 AND JobId = 1"转换为:

var keys = new {PersonId=1, JobId=2};
PersonJob obj = Session.Get(keys);

顺便说一句:地图看起来像这样:


  
    
  
  


  
    
  
  


  
    
    
  
  

joshua.ewer.. 8

好吧,我回答了我自己的问题.我认为发布你的问题几乎就像和某人说话一样.如果我要将PersonJob的composite-id作为组件或类,即


    
      
      
    

然后我可以这样做:

PersonJobKey key = new PersonJobKey() { PersonId = 1, JobId = 1 };  
PersonJob obj = Session.Get(key);  
int yearsOfEmployment = obj.YearsOfEmployment;

凉.希望这可以帮助其他人搞清楚......



1> joshua.ewer..:

好吧,我回答了我自己的问题.我认为发布你的问题几乎就像和某人说话一样.如果我要将PersonJob的composite-id作为组件或类,即


    
      
      
    

然后我可以这样做:

PersonJobKey key = new PersonJobKey() { PersonId = 1, JobId = 1 };  
PersonJob obj = Session.Get(key);  
int yearsOfEmployment = obj.YearsOfEmployment;

凉.希望这可以帮助其他人搞清楚......

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有