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 已經映射,但我不想創建一個視圖來將此 DTO 轉換為物體。
我已經驗證了這個主題,但沒有重大進展 使用沒有物體的 JpaRepository 互動風格
我正在嘗試這個
界面 -
公共介面 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
uj5u.com熱心網友回復:
是否可以在沒有物體的情況下使用 JpaRepository?
不,它不是,它會完全違背 JPA 的目的,根據定義。
JPA 是啟用 ORM(物件關系映射)的持久性規范,也就是說,您將 Java物件映射到資料庫表的條目/行,并將 Java 型別分別映射到資料庫表。
DTO(資料傳輸物件)與 ORM 無關,它有不同的用途(我建議你閱讀這篇文章以了解 DTO 與物體的關系)——通過 Java 物件傳輸資料——它通常服務于中間層,用于轉換將持久物件@Entity轉換為要在 Web 層 (DTO) 中使用的物件,反之亦然。
如果你真的想避免持久層模型(@Entitys),你可能會選擇 JDBC 抽象(例如 Spring Data JDBC)、本機查詢、JPQL、HQL 或裸 JDBC API(我不推薦)。
uj5u.com熱心網友回復:
您可以使用基于介面的投影。
例如
創建您的本機查詢,為其列別名。
select name as fullName, age as age from person.創建一個代表您的 DTO 的介面,并為您的本機查詢的每個別名提供 get 方法。
interface MyDTO {
String getFullName();
Integer getAge();
}
- 您的查詢的回傳型別現在可以是這個 MyDTO
@Query(value = "select name as fullName, age as age from person", nativeQuery=true)
List<MyDTO> findMyDTO();
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/432636.html
下一篇:TomEE找不到我配置的資料源
