gpt4 book ai didi

java - 如何在 Hibernate/JPA 中实现 "optional"关系?

转载 作者:太空宇宙 更新时间:2023-11-04 15:09:23 24 4
gpt4 key购买 nike

我正在使用 JPA 的 Hibernate 3.6 实现。我有两个具有逻辑父子关系的表。通常,“父项”中的每条记录在“子项”中都有一个记录。这些表格如下所示:

CREATE TABLE FOO (
FOO_ID INT IDENTITY,
BAR_ID INT DEFAULT 0 NOT NULL,
SOMEDATA CHAR(50) );

CREATE TABLE BAR (
BAR_ID INT IDENTITY,
OTHERDATA CHAR(50),
STILLOTHER CHAR(50)) ;

但是,已决定某些“父”记录不应包含“子”记录,我应该在 FOO.BAR_ID 列中放置 0

如何在我的实体类中实现它?现在类看起来像这样:

public class Foo implements java.io.Serializable {
@Id
@GeneratedValue
@Column(name = "FOO_ID", unique = true, nullable = false)
private Long fooId;
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name = "BAR_ID", nullable = false)
private Bar bar;
}


public class Bar implements java.io.Serializable {
@Id
@GeneratedValue
@Column(name = "BAR_ID", unique = true, nullable = false)
private Long barId;

)

我似乎找不到正确的语法来将 0 放入 FOO.BAR_ID 列中,而不尝试在 BAR< 中创建记录表。这甚至可以用 Hibernate 来完成吗?

最佳答案

@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name = "BAR_ID", nullable = false)

我相信你应该尝试删除。

nullable = false

你告诉hibernate Foo的Bar不能为空。如果 Bar 是可选的,那么有时它必须为 null。由于它不能为 null 并且 CascadeType 为 Persist,因此当您保存 Foo 时,Hibernate 正在保存 Foo 必须具有的 Bar。

关于java - 如何在 Hibernate/JPA 中实现 "optional"关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21541818/

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