наследование с беглым nhibernate - PullRequest
1 голос
/ 21 июля 2010

Этот вопрос действительно должен установить, возможно ли то, чего я пытаюсь достичь.

У меня есть три таблицы, я опущу реальные имена, чтобы они были простыми и менее запутанными

так что у нас есть

человек [ ПИД - уникальный идентификатор ПК ]

Заявитель [ ПИД - уникальный идентификатор ПК, ПОМОЩЬ - varchar (20)]

Student [ ПИД - уникальный идентификатор ПК, SID - int]

таблицы учеников и кандидатов связаны с таблицей лиц с отношением один к одному (где первичный ключ хранится в таблице сотрудников), но не связаны друг с другом.

У меня есть следующие доменные объекты

public class Person
{
    public virtual Guid PID{get;set;}
}

public class Applicant: Person
{
    public virtual string AID {get;set;}
}

public class Student:Person
{
    public virtual int SID {get;set;}
}

Каждый из них имеет класс карты, производный от ClassMap или SubClassMap

public class PersonMap: ClassMap<Person>
{
    public PersonMap()
    {
        Id(x => x.PID).GeneratedBy.Assigned();
        Table("Person");
    }
}

public class ApplicantMap: SubclassMap<Applicant>
{
    public ApplicantMap()
    {
        Table("Applicant");
        KeyColumn("PID");
        Map(x => x.AID);
    }
}

public class StudentMap:SubclassMap<Student>
{
    public StudentMap()
    {
        Table("Student");
        KeyColumn("PID");
        Map(x => x.SID);
    }
}

Мой вопрос: возможно ли иметь человека, который является кандидатом и студентом одновременно? В терминах базы данных у меня может быть строка в каждой таблице, которая содержит один и тот же PID, nhibernate позволит мне сохранить и восстановить все три объекта?

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

public void MakePersonAStudent(Person p)
{
    Student newStudent = new Student();
    newStudent.PID = p.PID;
    newStudent.SID = getNewStudentID();
    Session.Save(newPerson);
}    

Создано исключение:

другой объект с тем же значением идентификатора уже был связан с сеансом .... 73e5fd90-c27a-49d8-87dc-cd6413c120a2, объекта: Student

1 Ответ

0 голосов
/ 21 июля 2010

использовать наследование single_table. документ для гибернации: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...