gpt4 book ai didi

java - Hibernate 多对一外键默认值 0

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:21 27 4
gpt4 key购买 nike

我有一个表,其中父对象具有可选的多对一关系。问题是该表设置为默认 fkey 列为 0。

选择时,使用 fetch="join"等——fkey 上的默认值 0 用于反复尝试从另一个表中选择 ID 0。当然这不存在,但是我如何告诉 Hibernate 将值 0 视为与 NULL 相同——在获取不存在的关系时不循环 20 多次?

<many-to-one name="device" lazy="false" class="Device" not-null="true" access="field" cascade="none" not-found="ignore">
<column name="DEVICEID" default="0" not-null="false"/>

最佳答案

有两种方法可以做到这一点,一种在性能方面会变得丑陋,另一种是痛苦和尴尬的。

潜在丑陋的方式是在 ToOne 端完成的。使用 Hibernate Annotations 它将是:

@Entity
public class Foo
{
...

@ManyToOne
@JoinColumn( name = "DEVICEID" )
@NotFound( action = NotFoundAction.IGNORE )
private Device device;

...
}

不幸的是,这会强制执行抢占式数据库命中(无延迟加载),因为设备可以为空,如果 Hibernate 创建了一个延迟设备,则“设备 == null”永远不会为真。

另一种方法涉及创建一个自定义 UserType,它拦截 ID 0 的请求并为它们返回 null,然后使用 @Type 将其分配给 of Device 的主键。这会强制对每个具有外键的人进行 0 ~ null 解释。

关于java - Hibernate 多对一外键默认值 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4676594/

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