首页 > 解决方案 > 内部联接查询在 JPA 自定义查询中不起作用

问题描述

我想使用 JPA 自定义查询执行内连接查询,当我在 @Query() 中定义内连接查询时,它会抛出一个异常的结果。当我在 MYSQL yog 编辑器中编写相同的查询时,此查询工作正常,没有问题。但是在我的数据库表组织中使用 JPA 生成问题,将 address_id 作为外键。address_id 列名自动生成,没有我在实体类中定义 address_id 的地方。当我通过调用 organization.address=Address.id 触发内部联接查询时显示以下错误类型

Type mismatch: com.nilmani.onetooneunidirectional.entiry.Address type is expected 

这里是查询 organizationRepository.kt

package com.nilmani.onetooneunidirectional.repository

import com.nilmani.onetooneunidirectional.entiry.Organization
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.Query

interface OrganizationRepository : JpaRepository<Organization,Long> {
    @Query("SELECT Organization .id,Organization .name,Address .building,Address .city FROM  Organization INNER JOIN Address WHERE Organization.address =Address .id")
    fun findSomeRelationalFeatures()
}

组织.kt

package com.nilmani.onetooneunidirectional.entiry

import javax.persistence.*

@Entity
data class Organization(
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    val id:Long=-1,
    var name:String="",
    var orgId:String="",
    @OneToOne(targetEntity = Address::class,cascade = [CascadeType.ALL])
    var address: Address
)

地址.kt

package com.nilmani.onetooneunidirectional.entiry

import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id

@Entity
data class Address(
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    val id:Long=-1,
    val building:String="",
    val street:String="",
    val city:String="",
    val state:String="",
    val country:String="",
    val zipCode:String=""
)

标签: mysqljpa

解决方案


尝试这个 :

select o from Organization o inner join fetch o.address

推荐阅读