gpt4 book ai didi

spring - 使用两种类型的 Kotlin JPA 查询内部连接

转载 作者:行者123 更新时间:2023-12-02 12:52:38 25 4
gpt4 key购买 nike

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

抱歉,如果我的问题不清楚,我是 Kotlin 的新手。

更新代码我的存储库代码

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>
}



我的 Controller 代码

    @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)
}
}

最佳答案

正如评论中正确指出的那样,您查询的返回类型是 List<Array<Any?>> , 不是 List<Any> .

创建一个数据类作为您的 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 */)
}
}

关于spring - 使用两种类型的 Kotlin JPA 查询内部连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59547724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com