java - 不尊重 Kotlin JPA Lazy RestAPI
问题描述
我有一个 Java 项目,我正在转换为 Kotlin,但是具有关系和映射 @ManytoOne 的实体存在问题。他们使用映射 fecht 类型 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 儿子 TipoSituacao 直到不返回,但查询继续执行。
我尝试使用 DTO,但同样的问题。
每次我使用 situacaoRepository.find 或 findAll 时都会执行查询。
有问题的项目链接:https ://github.com/maxbrizolla/spring-kotlin-jpa-problem
有人可以帮助我吗?
解决方案
The problem here is your data class gets autogenerated toString, equals and hashcode methods which trigger property loading so hibernate execute extra required queries for that.
Data classes are not encouraged to be used with JPA.
推荐阅读
- java - jdeps 命令与 `--multi-release` 选项一起使用失败
- python - 紫外-可见光谱,使用 readline() 方法
- apollo - 使用不同的 ID 字段名称更新 Apollo Optimistic UI
- html - 转换为图像的 HTML 元素
- python - Python:无法检查文件的内容
- kotlin - 从代码块执行和返回(在 Elvis 运算符之后)
- hyperledger-fabric - Hyperledger Fabric 用户权限的区别
- python-3.x - 如何在从宽变长之前检测值变量?
- python - 不同队列的不同工作人员
- unity3d - Jenkins 统一构建总是卡住