dao,tx,服务结构:在哪里放置一个查询抽象实体的方法?

时间:2012-03-08 16:03:34

标签: java spring hibernate jpa

我有一个抽象的实体,其他4个实体继承自。这种关系运作良好,但是我想查询抽象实体,以便我得到所有实体而不管它们的类型。我不知道在哪里放置这样的方法,因为父实体dao也是抽象的。

EntityParent(摘要) - > EntityType1,EntityType2,EntityType3,EntityType4

DAO看起来像这样:

EntityParentDAO(摘要) - > EntityType1DAO,EntityType2DAO,EntityType3DAO,EntityType4DAO

TX也是这样的: EntityParentTx(摘要) - > EntityType1Tx,EntityType2Tx,EntityType3Tx,EntityType4Tx

我的项目结构如下: 实体 - >每个实体的DAO - >每个DAO的TX - >服务组合多个TX

服务,它使用我项目范围内的所有* TX *。这是应该放置标准/ HQL查询的位置吗?这听起来不太对劲。

例如,假设我有一个Car父实体,我有子实体CoupeSedanMinivan等等,我想要一个汽车列表给定一个对所有人都共有的属性,因此在实体(及其表格)中Car。给定我正在遵循的结构,我将在哪里放置此查询/方法?

1 个答案:

答案 0 :(得分:1)

我不确定我是否遵循事务继承,但为什么不让父dao具体并将其添加到那里?只要父项是实体,并且它具有该字段,您就可以对其进行查询。返回类型将是基类型的列表,但它将是实际类型的实例。

例如:

@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> {}