不遵守Kotlin JPA Lazy RestAPI

问题描述 投票:0回答:1

我有一个Java项目,正在转换为Kotlin,但是具有关系并映射@ManytoOne的实体存在问题。他们使用的映射类型为LAZY的实体,不是尊重LAZY并执行查询。

示例:

实体父亲:

@Entity
@Table(name = "TIPOSITUACAO")
data class TipoSituacao (
    @Id
    @Column(name = "ID")
    val id: Long? = null,

    @Column(name = "DESCRICAO")
    val descricao: String? = null
)

实体儿子:

@Entity
@Table(name = "SITUACAO")
data class Situacao (

    @Id
    @Column(name = "ID")
    val id: Long,

    @Column(name = "DESCRICAO")
    val descricao: String = "",

    @Column(name = "TIPOSITUACAO_ID")
    val tipoSituacaoId: Long? = null,

    @ManyToOne(fetch = FetchType.LAZY, optional = true)
    @JoinColumn(name = "TIPOSITUACAO_ID", referencedColumnName = "ID", insertable = false, updatable = false)
    val tipoSituacao: TipoSituacao? = null
)

我的端点:

@RequestMapping("/api")
@RestController
class EndPoints {
    @Autowired
    private val situacaoRepository: SituacaoRepository? = null

   val situacao: List<Situacao>
        @GetMapping(value = ["/situacao"])
        get() = situacaoRepository!!.findAll()
}

返回:

[
    {
        "id": 1,
        "descricao": "SITUACAO 1.1",
        "tipoSituacaoId": 1,
        "tipoSituacao": {
            "id": 1,
            "descricao": "TIPO SITUACAO 1"
        }
    },
    {
        "id": 2,
        "descricao": "SITUACAO 1.2",
        "tipoSituacaoId": 1,
        "tipoSituacao": {
            "id": 1,
            "descricao": "TIPO SITUACAO 1"
        }
    },
    {
        "id": 3,
        "descricao": "SITUACAO 2.1",
        "tipoSituacaoId": 2,
        "tipoSituacao": {
            "id": 2,
            "descricao": "TIPO SITUACAO 2"
        }
    }
]

查询:

Hibernate: select situacao0_.id as id1_0_, situacao0_.descricao as descrica2_0_, situacao0_.tiposituacao_id as tipositu3_0_ from situacao situacao0_
Hibernate: select tiposituac0_.id as id1_1_0_, tiposituac0_.descricao as descrica2_1_0_ from tiposituacao tiposituac0_ where tiposituac0_.id=?
Hibernate: select tiposituac0_.id as id1_1_0_, tiposituac0_.descricao as descrica2_1_0_ from tiposituacao tiposituac0_ where tiposituac0_.id=?

如果我使用@@ JsonIgnore@@ JsonManageReference]或@ JsonBackReference o直到未返回,但查询将继续执行。

我尝试使用DTO,但存在相同的问题。

每次我使用situacaoRepository.find或findAll都会执行查询。

有问题的项目链接:https://github.com/maxbrizolla/spring-kotlin-jpa-problem

有人可以帮我吗?

我有一个Java项目,正在转换为Kotlin,但是具有关系并映射@ManytoOne的实体存在问题。他们正在使用映射类型为LAZY的实体,不是吗...

java jpa kotlin lazy-loading many-to-one
1个回答
0
投票

因为kotlin数据类是最终的,所以休眠无法为懒惰的获取实体生成代理。您可以将TipoSituacao定义为普通班,以进行懒惰的抓取工作。

© www.soinside.com 2019 - 2024. All rights reserved.