使用spring data规范查询多态jpa实体?

问题描述 投票:0回答:1

让我们想象以下实体:

@Inheritance(JOINED)
@Entity
abstract class AbstractCompany {
  @Id
  private Long id;
  private String name;

  //...
}

@Entity
class Company extends AbstractCompany {
  private String city;

  //...
}

@Entity Invitation extends AbstractCompany {
  private boolean expired;

  //...
}

问题是:如何使用 Spring Data Jpa

Specification
查询来自伦敦的公司或未过期邀请的所有 AbstractCompanies(仅使用一个查询:我想要一致的分页和“按名称”排序)?

由于我们涉及继承,我必须使用

jakarta.persistence.criteria.CriteriaBuilder#treat
但这意味着内部联接并仅选择一种类型。

java hibernate jpa spring-data-jpa
1个回答
0
投票

我看到您正在使用 @Inheritance(JOINED) 注释,因此子类获得了超类的主键外键列。

我将向您推荐 Spring Data JPA 的解决方案。在实现上,我没有看到任何问题,所以我可以帮助您实现@Repository接口。

@Repository
public interface AbstractCompanyRepository extends JpaRepository<AbstractCompany, Long> {
    @Query("SELECT DISTINCT a FROM AbstractCompany a " +
           "JOIN Company c ON c.id = a.id " +
           "JOIN Invitation i ON i.id = a.id " +
           "WHERE c.city = 'London' " +
           "AND NOT i.expired")
    List<AbstractCompany> getLondonAndNotExpired();
}
© www.soinside.com 2019 - 2024. All rights reserved.