首页 > 解决方案 > JPA 通过 ForeginKey 选择项目

问题描述

我想使用 Springs CrudRepository 获取数据表单数据库

我的代码是:

地区:

@Entity
@Table(name = NAME)
data class Region(
        @Id @GeneratedValue val id: Long,
        val name: String,
        val lat: Double,
        val lon: Double,
        @CollectionTable(name = "RegionAlternateName", joinColumns = [JoinColumn(name = "id", referencedColumnName = "id")])
        @ElementCollection(fetch = FetchType.EAGER)
        @Column(name = "name")
        val alternateNames: List<String>
) {
    companion object {
        const val NAME = "Region"
    }
}

子区域:

@Entity
@Table(name = NAME)
@NamedQueries(
        NamedQuery(name = "Region.findByRegionId", query = "SELECT e FROM SubRegion e WHERE (e.region.id) =:regionId")
)
data class SubRegion(
        @Id @GeneratedValue val id: Long,
        val lat: Double,
        val lon: Double,
        @OneToOne(fetch = FetchType.EAGER) @JoinColumn(name = "id") val region: Region
) {
    companion object {
        const val NAME = "SubRegion"
    }
}

子区域存储库:

@Repository
interface SubRegionRepository : CrudRepository<SubRegion, Long> {
    fun findByRegionId(regionId: Long): SubRegion?
}

但是当我使用方法时, subRegionRepository.findByRegionId(3) 我收到了 id = 3 的子区域,而不是属于 id = 3 的区域的“某些”子区域

我做错了什么?

标签: sqldatabasespringkotlinspring-data-jpa

解决方案


推荐阅读