java - JPA 继承 - 如何选择每个子类型的 3 个实体?

标签 java hibernate jpa mappedsuperclass

如果您有这种类型的 JPA 实体设置,其中包含一个父类(super class)和一些子类(见下文),那么如何编写一个 JPA 查询来选择每个子类的前 3 个(按创建日期排序) ?编写两个单独的查询并请求特定的子类效果很好,但如果可能的话,我想将其简化为一个查询。

@MappedSuperclass
public class Parent {
    @Temporal(TIMESTAMP)
    @Column(name = "created")
    private Date created;
    ...
}

@Entity
@DiscriminatorValue("A")
public class ChildA extends Parent {
    ...
}

@Entity
@DiscriminatorValue("B")
public class ChildB extends Parent {
    ...
}

最佳答案

您不能将 @MappedSuperclass 用于此用例(JPA 规范):

A mapped superclass, unlike an entity, is not queryable and must not be passed as an argument to EntityManager or Query operations.

因此,将您的父类(super class)转换为抽象实体:

@Entity
@Inheritance(strategy=SINGLE_TABLE)
@NamedQuery(name="queryName", query="SELECT p FROM Parent p ORDER BY p.createdDate DESC, DTYPE(p) ASC")
public abstract class Parent {

  @Temporal(TIMESTAMP)
  private Calendar createdDate;
}

关于java - JPA 继承 - 如何选择每个子类型的 3 个实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25983839/

相关文章:

java - Hibernate 标准,两个实体

java - 我如何在 spring mvc 中使用我的 Controller ?

java - Glassfish 项目似乎没有在 Tomcat 服务器上运行

java - 如何使用 hibernate 设置 UserTransaction

java - Hibernate关系一对一

java - 是否有使用 JPA 进行触发器的代码级方法

java - Spring Boot JPQL 不适用于特定条件

java - JPA中表之间的关系是如何设置的?

java - 在配置 ejabberd 时需要帮助

java - clear() 函数不会清除输入网页元素的默认值