dao, tx, структура сервиса: где разместить метод, запрашивающий абстрактную сущность? - PullRequest
0 голосов
/ 08 марта 2012

У меня есть абстрактная сущность, от которой наследуются 4 других сущности. Это соотношение работает хорошо, однако я хочу запросить абстрактную сущность, чтобы получить все сущности независимо от их типов. Я понятия не имею, где разместить такой метод, так как родительская сущность dao также абстрактна.

EntityParent (аннотация) -> EntityType1, EntityType2, EntityType3, EntityType4

DAO выглядят так:

EntityParentDAO (аннотация) -> EntityType1DAO, EntityType2DAO, EntityType3DAO, EntityType4DAO

TX также выглядит так: EntityParentTx (абстрактный) -> EntityType1Tx, EntityType2Tx, EntityType3Tx, EntityType4Tx

Структура моего проекта выглядит следующим образом: Объекты -> DAO для каждого объекта -> TX для каждого DAO -> Сервис, объединяющий несколько TX

Существует Служба , которая использует все * TX * s, которые входят в сферу моего проекта. Это где критерии / HQL-запрос должен быть размещен? Это звучит не совсем правильно.

Например, допустим, у меня есть родительская сущность Car, и у меня есть дочерние сущности Coupe, Sedan, Minivan и т. Д., И я хочу получить список автомобилей, которым присуще свойство, общее для всех и, следовательно, в сущности (и в ее таблице) Car. Где бы я разместил этот запрос / метод, учитывая структуру, которой я следую?

1 Ответ

1 голос
/ 08 марта 2012

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

Пример:

@Entity
@Table(name = "table")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER)
public abstract class ParentImpl implements Parent{}

@Entity
@DiscriminatorValue("1")
public class Entity1Impl extends ParentImpl {}

public interface AbstractDao<T extends Parent> {}

public interface ConcreteParentDao<Parent> {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...