gpt4 book ai didi

java - JPA双向关系

转载 作者:行者123 更新时间:2023-12-01 13:08:06 25 4
gpt4 key购买 nike

我正在尝试在用户和地址之间建立双向关系,

用户1---------->*地址

但是

地址 1 -------> 1 个用户

在引用互联网时我得到了这些信息

  • 对于一对一的双向关系,拥有方对应包含相应外键的一侧

  • 双向关系的反面必须引用其
    拥有方通过使用 OneToOne 的mappedBy 元素,
    OneToMany 或多对多注释。 mappedBy 元素指定作为所有者的实体中的属性或字段
    关系。

但是如果我按照信息进行操作

我需要在用户实体上使用 Mapped By,其中 Set

保留 OnetoMany 映射同时,我需要在用户持有 OnetoOne 映射的地址实体上使用 Mapped By

注意:但是用户地址实体上的 @JoinColumn 工作正常。如果我在用户实体或地址实体上使用mappedBy,我会得到异常说明

"The attribute [addresses] in entity class [class com.entity.User] has a mappedBy value of [User] which does not exist in its owning entity class [class com.entity.Address]. If the owning entity class is a @MappedSuperclass, this is invalid, and your attribute should reference the correct subclass."

我对如何使用映射者来实现这种类型的双向关系感到困惑。

更新:

<pre>
@Entity
public class User {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
protected Long id;
...
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY,mappedBy="user")
private Set<Address> adresses;
}


@Entity
public class Address {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
protected Long id;
...
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "userid", nullable = false)
private User user;
}
</pre>

最佳答案

问题是 @OneToMany 只能具有相反的 @ManyToOne,而不是 @OneToOne@OneToOne 只能由另一个 @OneToOne 映射,请检查这些方法的 javadoc。

下面的映射给出了您想要的含义:一个用户可以拥有多个地址,但一个地址只能使用 @JoinColumn 中指定的外键中的 id 引用一个用户:

@Entity
public class User {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
protected Long id;
...
@OneToMany(mappedBy="user")
private Set<Address> adresses;
}


@Entity
public class Address {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
protected Long id;
...
@ManyToOne(optional=false)
@JoinColumn("your_foreign_key_name")
private User user;
}

关于java - JPA双向关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23117137/

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