Используя одну таблицу для иерархии классов, я хотел бы использовать проекцию, чтобы сгладить иерархию и представить пользователю список результатов.
Есть ли способ сделать это с помощью HQL или Criteria APIбез необходимости создавать несколько отдельных запросов или объединений?
Классы
public class A {
public virtual long Id { get; set; }
}
public class B : A {
public virtual DateTime SomeDate { get; set; }
public virtual OtherEntity Other { get; set; }
}
public class C : A {
public virtual DateTime? SomeDate { get; set; }
public virtual string Description { get; set; }
}
public class D : A {
public virtual string Description { get; set; }
}
public class OtherEntity {
public virtual string Name { get; set; }
}
Таблицы SQL:
CREATE TABLE Items (
Id bigint NOT NULL PRIMARY KEY,
Kind char(1) NOT NULL,
SomeDate datetime NULL,
Description NULL
)
CREATE TABLE OtherEntity (
Id bigint NOT NULL PRIMARY KEY,
Name nvarchar(255) NOT NULL
)
Выходная проекция:
public class ItemReport {
// From A.Id
public virtual long Id { get; set; }
// From B.SomeDate or C.SomeDate
public virtual DateTime? SomeDate { get; set; }
// From C.Description or D.Description
public virtual string Description { get; set; }
// From B.OtherEntity.Name
public virtual string OtherName { get; set; }
}