gpt4 book ai didi

spring - @ManyToOne 的 "optional"参数是否使用 Kotlin 的可为空性自动设置

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

我读到,在 @ManyToOne 关联注释中指定 optional = false 可以帮助 Spring 提高查询的性能。

在 Kotlin 数据类实体中,我实际上需要在注释中指定参数吗?还是 Spring 可以使用 item 字段的可空性自行解决这个问题?

例如,如果我有以下声明:

@Entity
@Table(name = ACCESS_LOGS_ARCHIVES_TABLE, indexes = [
Index(name = "access_logs_archives_item_idx", columnList = "access_item_id")
])
data class AccessLogArchive(
val date: LocalDate,

@ManyToOne(optional = false)
@JoinColumn(name = "access_item_id", nullable = false)
val item: AccessLogItem,

val occurrences: Int
) {
@Id
@GeneratedValue
var id: Long? = null
}

@Entity
@Table(name = ACCESS_ITEMS_TABLE)
data class AccessLogItem(
@Column(length = 3) val code: String,
@Column(columnDefinition = "text") val path: String,
@Column(length = 10) val verb: String
) {
@Id
@GeneratedValue
var id: Long? = null
}

在这种情况下,我希望 Spring 知道 item 字段不可为空,因此即使没有像我一样指定它。是这样吗?

顺便说一句,同样的问题也适用于 @JoinColumnnullable = false

最佳答案

考虑一个简单的实体,例如 Room,它与 House 具有 @ManyToOne 关系。

@Entity
class Room(
@ManyToOne(optional = true)
val house: House
) {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
val id: Long = 0
}

JPA 将创建一个带有列的房间表

`house_id` bigint(20) DEFAULT NULL

如果您指定@ManyToOne(Optional = false)

该列将如下所示:

`house_id` bigint(20) NOT NULL

通过指定 optional ,您可以告诉 JPA 如何生成架构,列是否可以为 NULL

在运行时尝试加载没有 HouseRoom 将会导致异常,如果 house 属性不可为空(House 而不是 House?),即使可选的值为true

这同样适用于@JoinColumn

Is @ManyToOne's “optional” param automatically set using Kotlin's nullability?

不,不是。它与此无关,并且默认设置为 true

结论:为了让您的模式能够反射(reflect)您的实体,如果房屋属性可为空且可选,则最好使用Optional = true = false 如果特性不可为空。

关于spring - @ManyToOne 的 "optional"参数是否使用 Kotlin 的可为空性自动设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54241100/

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