当前位置: 首页 > 知识库问答 >
问题:

Kotlin JPA使用两种类型查询内部联接

蔺昊穹
2023-03-14

我是静态编程语言和JPA的新手。我有一个从两个表(Postgres)获取数据的内连接查询。查询工作正常。但是,由于我现在有两种类型(两个表),使用其中任何一种只返回其中一个表的所有字段。为了返回所有字段,我将类型更改为List。但是,当我这样做时,返回的对象没有字段,只有原始数据。我如何改变我的代码,使我的json响应既包含字段的名称,也包含数据。

对不起,如果我的问题不清楚,我对科特林很陌生。

更新代码我的仓库代码

package com.sg.xxx.XXXTTT.report.repository
import com.sg.xxx.XXXTTT.report.model.Report
import com.sg.xxx.XXXTTT.report.model.ReportWithBatches
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.Query
import org.springframework.stereotype.Repository
import java.time.LocalDate


@Repository
interface IReportRepository : JpaRepository<Report, Long> {

    fun findAllByCreationDate(date: LocalDate): List<Report>

    fun findByReportName(name: String): Report?

    fun findByAdlsFullPath(name: String): Report?

    @Query("SELECT new com.sg.xxx.xxxttt.report.model.ReportWithBatches(r.adlsFullPath, r.sentToXXX, r.contentLength, r.creationDate, r.remoteFileNameOnFTA, b.dataPath , b.version, b.source, r.numberOfRecords) FROM Report r INNER JOIN BatchInfo b ON r.reportUuid = b.reportUuid WHERE r.creationDate = ?1")
    fun findAllByCreationDateJoinBatches(date: LocalDate): List<ReportWithBatches>
}



我的控制器代码

    @GetMapping(value = ["/linkBatches/{today}"])
    fun findAllByCreationDateJoinBatches(@PathVariable("today") @DateTimeFormat(pattern = "yyyyMMdd") date: LocalDate): List<ReportWithBatches> {
        return eligibleService.findAllByCreationDateJoinBatches(date)
    }

我的DTO

package com.sg.xxx.xxxttt.report.model
import java.time.LocalDate

open class ReportWithBatches(
        var adlsFullPath: String?,
        var sentToXXX: Boolean?,
        var contentLength: Long?,
        var creationDate: LocalDate,
        var remoteFileNameOnFTA: String?,
        var dataPath: String?,
        var version: Int?,
        var source: String?,
        var numberOfRecords: Long?
)





我在军中的职责

fun findAllByCreationDateJoinBatches(date: LocalDate): List<ReportWithBatches> {
        return reportRepository.findAllByCreationDateJoinBatches(date)
    }
        }

共有1个答案

王彭薄
2023-03-14

正如注释中正确指出的,查询的返回类型是List

创建用作DTO的数据类,并将结果映射到该类:

data class ReportWithBatchInfo(val azureFileName : String, /* more field here */)

fun findAllByCreationDateJoinBatches(date: LocalDate): List<ReportWithBatchInfo> {
    return reportRepository.findAllByCreationDateJoinBatches(date).map {
        ReportWithBatchInfo(it[0] as String, /* more mappings here */)
    }
}

 类似资料:
  • 问题内容: 我有两个要与之进行内部联接的表。 一个是主键为的表。 另一个表是外键在哪里。也有一个列,其中where是表的外键。 我正在尝试汇总一个ActiveRecord查询,在这里我可以选择N天前或之前创建的所有用户,并且其中任何一个都没有等于特定ID的用户。我试图做这样的事情: 此查询字段超过30,000个结果,这是不正确的,因为Users表仅具有12,000行。 我到底在做什么错? 问题答案

  • 问题内容: 我有这个查询: 在访问时执行此查询时,出现“语法错误”。你有看错吗? 谢谢 问题答案: 您可以使用a来对更新查询中的其他表求和。具有聚合的子查询将无法工作,因为它们不可更新。

  • 我有一个使用TypeORM包与Postgres SQL交互的nestjs应用程序。 我有下面的代码, 对于键和用户实体,我需要将内部连接创建为 选择*FROM key INNER JOIN user ON key.id=user.“keyid”,其中user.“userid”=1; 如何使用typeorm编写等效的内部联接查询? 如何使用typeorm执行上面的SQL查询?

  • 问题内容: 我想在我的域/实体对象中执行以下操作: 这样我就可以在服务层中执行以下操作: 但是,我在HQL中的语法不正确-大约十分钟后,我决定放弃正式文档并在此处询问…?我的usercat表是这样加入的: 的SQL是这样,它在我的数据库命令提示符下工作正常: 仅仅是我还是休眠文档比较痛苦,您是否发现自己经常想知道,编写普通的jdbc准备好的语句来填充pojos / domain objects /

  • 问题内容: 我有这两张表 每天,无论交易/记录的数量如何,每个uid都将接收入和出的余额值 我想做的就是结合查询结果像这样 但是,当我执行此查询时 它产生无效的结果(SUM是两倍或三倍),我应该如何修改查询以使其不会产生两倍的结果? 问题答案: 首先建立总和,然后加入。像这样: 您拥有的方式,每一个都会与每个匹配项结合在一起,从而使数字相乘。您必须先进行汇总,然后再将 一个 总和与 一个 总和结合

  • 我想从short_name(国家名称)、name(州表)或region_name的任何可用数据中选择post_id。对region_name而不是short_name(国家名称),name(州表)执行以下查询,结果为真。 请告诉我,我哪里弄错了!