gpt4 book ai didi

hibernate - 将 '0' ,"-1"视为 Null

转载 作者:行者123 更新时间:2023-12-03 00:11:39 27 4
gpt4 key购买 nike

我正在使用一个大型的旧数据库,现在我尝试使用 hibernate 而不是 SQL 来访问它。更大的问题之一是在外键中无限制地使用“0”和“-1”(意思是“NULL”)。

我生成了很多代码,但我手动添加了联接。像这样

@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(nullable = true, name = "fkActivityId")
public List<Activity> getActivities() {
return activities;
}

问题是,一旦我有一个 fkActivityId = "-1"或 "0"表示 NULL 的对象,就会出现异常,提示找不到这样的对象。

有没有办法让 Hibernate 表现得像 NULL 一样?

最佳答案

我现在尝试了两件事。

我编写了一个 NullableIDType 扩展 UserType,当数据包含“0”或“-1”时,它将返回 null。就像 DanVinton 所建议的那样(投票!)。但有一个问题。我必须将 UserType 设置为引用模型的 ID

@Id 
@GeneratedValue
@Column(name = "pkID", unique = true, nullable = false, type = NullableIDType)
public Integer getPkId() {
return this.pkId;
}

这会强制对此模型的所有引用使用“0”而不是“null”。我忘了说,大多数时候 null 都是在应该使用的时候使用的。因此,如果数据库始终使用“0”而不是“null”,这就会起作用。

然后是@NotFound(action=NotFoundAction.IGNORE) w

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="fkProjectBereichId",nullable = true)
@NotFound(action=NotFoundAction.IGNORE)
public Projectbereich getProjektbereich() {
return projektbereich;
}

起初,这似乎是一个糟糕但有效的解决方案,直到我保存了一些具有空引用的东西。它在数据库中保存为“null”,然后导致其他代码崩溃,正如它预期的“0”。

因此,为了使用 hibernate join,我必须在所有地方使用相同的 null 值。没办法了。

对于我的问题来说,这并不是一个真正令人满意的答案。但事情就是这样。

关于hibernate - 将 '0' ,"-1"视为 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/701236/

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