java - 是否可以在没有实体的情况下使用 JpaRepository?

标签 java spring-boot jpa

是否可以在没有实体的情况下使用 JpaRepository?在这种情况下,将其替换为 DTO。

如下示例

 @Repository
public interface BffRepository extends JpaRepository<BffDTO, String> {

@Query(nativeQuery = true, value = "select\n"
        + "ent.name as enterprise_name, dep.name as department_name,\n"
        + "sq.name as squad_name, acc.firstname as job_owner_name,\n"
        + "tpt.name as test_template_name, job.name, job.job_blocked, job.job_removed,\n"
        + "job.bot_scm_branch, job.bot_scm_url, job.schedule_startdate,\n"
        + "job.expiration_date, job.timestamp,job.uuid,job.schedule_starttime,\n"
        + "tpt.job_execution_timeout\n"
        + "from portal.jobs job\n"
        + "left join portal.enterprises ent on (ent.uuid = job.enterprise_id)\n"
        + "left join portal.departments dep on (dep.uuid = job.department_id)\n"
        + "left join portal.squads sq on (sq.uuid = job.squad_id)\n"
        + "left join portal.accounts acc on (acc.uuid = job.job_owner)\n"
        + "left join portal.test_plan_templates tpt on (tpt.uuid = job.template_id) where\n"
        + "job.job_owner = ?1 and job.job_removed = false order by timestamp desc;")
List<BffDTO>buscarPorJobOwner(String jobOwner);

这种情况有替代方案吗?

注意:DTO 已经映射,但我不想创建一个 View 来将此 DTO 转换为实体。

我已经验证了这个主题,但没有取得重大进展 Use JpaRepository interaction style without entity

我正在尝试这个

界面-

公共(public)接口(interface) BffDTOInterface2 {

String uuid();

String enterprise_name();

String department_name();

String squad_name();

String job_owner_name();

String test_template_name();

String name();

Boolean job_blocked();

Boolean job_removed();

String bot_scm_branch();

String bot_scm_url();

String schedule_startdate();

String expiration_date();

String timestamp();

String schedule_starttime();

Integer job_execution_timeout();

@Transient
String status();

}

我遇到了这个错误

Caused by: java.lang.IllegalArgumentException: Not a managed type: interface br.com.cloud.api.domain.dto.BffDTOInterface2

最佳答案

您可以使用基于接口(interface)的投影。

例如

  1. 创建您的 native 查询,为其列一个别名。 select name as fullName, age as age from person.

  2. 创建一个接口(interface)来代表您的 DTO,并为您的 native 查询的每个别名提供 get 方法。

interface MyDTO {
   String getFullName();
   Integer getAge();
} 
  1. 您的查询的返回类型现在可以是这个 MyDTO
@Query(value = "select name as fullName, age as age from person", nativeQuery=true)
List<MyDTO> findMyDTO();

关于java - 是否可以在没有实体的情况下使用 JpaRepository?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71177494/

相关文章:

java - 当常数未知时在 O(n) 和 O(n^2) 之间选择正确的算法

hibernate - Spring 在事务结束时启动不需要的 SQL 更新

java - 将复杂的 json 文件反序列化为 POJO - 要么作为一个列表元素工作,要么不工作

hibernate - 使 JPA EntityManager session 无效

java - 使用 Spring JPA 规范按子查询排序

java - 使用坐标存储系统创建稀疏矩阵?

java - 机器人类 mouseWheel 不工作

sql - 带有 nativeQuery 的 Spring Boot Query 注释在 Postgresql 中不起作用

java - 在 OpenSessionInViewFilter 之后没有定义名为 'sessionFactory' 的 bean

java - Selenium 非常相似的xpaths?