Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java dao、tx、服务结构:在哪里放置查询抽象实体的方法?_Java_Spring_Hibernate_Jpa - Fatal编程技术网

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

Java dao、tx、服务结构:在哪里放置查询抽象实体的方法?,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有一个抽象实体,其他4个实体从中继承。这种关系工作得很好,但是我想查询抽象实体,以便获得所有实体,而不管它们的类型如何。我不知道在哪里放置这样的方法,因为父实体dao也是抽象的 EntityParent(摘要)->EntityType1、EntityType2、EntityType3、EntityType4 DAO看起来像这样: EntityParentDAO(摘要)->EntityType1DAO、EntityType2DAO、EntityType3DAO、EntityType4DAO TX

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

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

DAO看起来像这样:

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

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

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

有一个服务使用我的项目范围内的所有*TX*s。这是应该放置criteria/HQL查询的位置吗?听起来不太对


例如,假设我有一个
汽车
父实体,我有子实体
轿跑车
轿车
小型货车
,等等,我想要一个汽车列表,该列表给定一个所有人都通用的属性,因此在实体(及其表)
汽车
。鉴于我所遵循的结构,我将把这个查询/方法放在哪里?

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

例:

@实体
@表(name=“Table”)
@继承(策略=InheritanceType.SINGLE_表)
@鉴别器列(name=“type”,鉴别器类型=鉴别器类型.INTEGER)
公共抽象类ParentImpl实现父{}
@实体
@鉴别器值(“1”)
公共类Entity1Impl扩展了ParentImpl{}
公共接口抽象DAO{}
公共接口{}

在移除父dao和父TX的抽象部分后,我得到:
原因:java.lang.ClassCastException:sun.reflect.generics.reflectiveObjects.TypeVariableImpl不能在我的抽象dao(父dao从中继承)和我的EntityParentDAO强制转换为java.lang.Class
。您可以离开抽象父级,并为其创建一个具体的实现(abstract->parent->sub,abstract->parent->concreteparent)。这样就不会破坏通用继承。或者将其移出继承(abstract->parent->sub to abstract->parent,abstract->sub)。这是正确的吗?具体的父级应该有它们,或者继承类型注释?使用这种方法,我一直有其他问题,尽管我不确定它们是否相关(例如获取时的NPE等)。。。实际上,我已经在这个抽象实体的dao测试中得到了NPE,所以我很确定它是相关的。dao的泛型应该是父类型。父实体应具有表/实体注释。根据您的继承策略,它还应该具有继承和可能的DescriptionArumn。
@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> {}