gpt4 book ai didi

hibernate - JPA/hibernate : How insert a default value for a @ManyToOne where the value represents a null entry

转载 作者:行者123 更新时间:2023-12-02 23:51:30 24 4
gpt4 key购买 nike

我对 JPA/Hibernate 相当陌生。我的问题涉及几个现有的数据库表,如下所示:

CREATE TABLE `person` (
`personId` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET latin1 NOT NULL DEFAULT '',
`addressId` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`personId`)
);

CREATE TABLE `address` (
`addressId` bigint(20) NOT NULL,
`address` varchar(255) CHARACTER SET latin1 NOT NULL DEFAULT '',
PRIMARY KEY (`addressId`)
);

实体的实现如下:

@Entity
public class Person {
@Id
private Integer personId;

private String name;

@ManyToOne
@JoinColumn(name="addressId")
private Address address;
}

@Entity
public class Address {
@Id
private Integer addressId;

private String address;

}

多个人可以居住在同一个地址。一个人也可以没有地址。 person 表中的 addressId 本质上是一个可选字段。地址数据库中没有addressId = 0。值 0 基本上被用作空参数。

我的问题是,当我尝试将一个人保留到地址 ID = 0 的表中时,就会发生这种情况。

如果我将 Person 中的 Address 对象设置为 null,则会收到以下错误:

“addressId 不能为空”

如果我将地址对象的addressId 设置为0,则会收到另一个transientObjectError,该错误是由于地址表中没有addressId = 0 的条目而返回的。

我尝试使用 @PrePersist 尝试在对象持久化之前设置默认值,但是,我得到了上面相同的两个错误。当我在 @ManyToOne 中添加 optional=true 时也是如此。

我认为插入 id=0 的虚拟地址不是一个好主意。

是否可以使用 @ManyToOne 注释并且仍然具有默认值 0(其中 0 不是数据库中的实际条目),有什么想法吗?

最佳答案

如果您确实必须保留这些 0 而不是 null,也许您可​​以尝试使用 CustomType。参见这里:Hibernate Many-To-One Foreign Key Default 0

关于hibernate - JPA/hibernate : How insert a default value for a @ManyToOne where the value represents a null entry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249003/

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