NHibernate: отображение для сложного объекта с интерфейсами для одной таблицы - PullRequest
0 голосов
/ 26 августа 2011

Я пытаюсь сопоставить составной объект, который имеет свойство с интерфейсом (INameTypeInfo).Этот интерфейс реализован двумя классами (PersonNameInfo и CompanyNameInfo).Информация для всех трех этих структур в одной таблице.

Объект выглядит так:

public class Name : Entity
{
    public virtual string FirstName {get; set;}

    public virtual string LastName {get; set;}

    public virtual INameTypeInfo NameTypeInfo {get; set;}

    etc...
}

Другие объекты выглядят следующим образом:

public class PersonNameTypeInfo()
{
    public string SSN {get; set;}
    public string AKAFistName {get; set;}
    public string AKALastName {get; set;}
    etc...
}

public class CompanyNameTypeInfo()
{
    public string FederalIDNumber {get; set;}
    public string AKAName {get; set;}
    etc...
}

Таблица БД выглядит следующим образом:

Имена

  • Имя
  • Фамилия
  • AKAFistName <------Если информация относится к компании, это поле используется для AKAName </li>
  • AKALastName
  • SSN
  • FID
  • CompanyContact

Также обратите внимание: объект Name также наследуется другими объектами, такими как Party: Name, Provider: Name и т. Д ...

База данных - это устаревшая база данных, которая уже используется.

Любой пример того, как я мог бы отобразить это на беглом языке, был бы полезен.

Спасибо.

1 Ответ

0 голосов
/ 26 августа 2011
public class person
{

// this is the table for person 
   private String name;
   private String lastName;
   private Company company;


}


public class Company
{ 
  private string name;
  private string address;
  // more properties.
}

Когда вы загружаете людей, вы также можете использовать компанию. Итак, когда вы говорите, Person.company.name получит имя, и если вы измените что-либо внутри человека, который имеет дело с компанией Hibernate, все изменения будут каскадно перенесены в базу данных.

Может быть, это не ваш вопрос, а просто пища для размышлений.

но если вы хотите сделать их составным ключом, вы можете создать третий пример объекта

public class  organization
{
  private person person;
  private company company;
}

вместо того, чтобы иметь компанию внутри человека. когда вы получаете организацию, вы получаете как человека, так и компанию DAO

...