java - dao、tx、服务结构 : where to place a method querying an abstract entity?

标签 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 code> 等等,我想要一个汽车列表,该列表具有所有人共有的属性,因此在实体(及其表)Car 中。考虑到我所遵循的结构,我应该在哪里放置此查询/方法?

最佳答案

我不确定我是否遵循事务继承,但为什么不将父 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> {}

关于java - dao、tx、服务结构 : where to place a method querying an abstract entity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620768/

相关文章:

java - 如何获取时间(hh :mm:ss) from two different dates in java

java - 包含对面板区域的绘图

java - 如何让 Jersey 客户端使用 HttpsURLConnection 中设置的 defaultSSLSocketFactory?

java - "unable to locate Spring NamespaceHandler"错误

java - 如何用 Hibernate 对树建模?

java - 如何使用 Hibernate/JPA 调用返回字符串的 Oracle 函数?

java - 如何以编程方式将新查找添加到默认地名词典中

spring - @Autowired(required=false) 在构造函数上给出 NoSuchBeanDefinitionException

java - 如何在 Ldap 中集成用户权限

java - Spring和Hibernate项目每天抛出JDBC异常