NHibernate: отображение для сложного объекта с интерфейсами для одной таблицы
Я пытаюсь сопоставить составной объект, который имеет свойство с интерфейсом (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
- AKALastName
- ПЛА
- FID
- CompanyContact
Также обратите внимание: объект Name также наследуется другими объектами, такими как Party:Name, Provider:Name и т. Д.
База данных - это устаревшая база данных, которая уже используется.
Любой пример того, как я мог бы сопоставить это с беглым, был бы полезным
Благодарю.
1 ответ
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