gpt4 book ai didi

java - 如何使用 JPA 将实体 A 映射到实体 B 两次以一对一关系?

转载 作者:行者123 更新时间:2023-11-30 02:28:33 26 4
gpt4 key购买 nike

所以我尝试的一切似乎都不起作用。我想要这样的东西:

class A {    
B foo;
B bar;
}

class B {
A baz;
}

我在A类中尝试的内容如下:

@OneToOne(targetEntity = B.class)
@JoinColumn(name = "foo_id")
@Cascade(CascadeType.ALL)
public B getFoo() {
return foo;
}

@OneToOne(targetEntity = B.class)
@JoinColumn(name = "bar_id")
@Cascade(CascadeType.ALL)
public B getBar() {
return bar;
}

这似乎不起作用。由于我不明白的原因,我总是最终发现 foo_id 和 bar_id 相同。

因此,当我检查数据库中的表“A”中 id 为 1 的行时,我希望:

foo_id = 1
bar_id = 2

在表 B 中,我应该有 2 个 ID 为 1 和 2 的实体,其中 baz_id = 1;

最佳答案

baz_id是否打算作为FK回到A?因为我认为在这种情况下数据库到模型的映射是错误的。您已经建立了从 B 的 PK 到 A.foo_id 或 A.bar_id 的 FK 关系。

在这样的关系中也要小心你的级联规则。 SQL Server 将拒绝同一个表的两个 FK,除非级联的数据库操作是“无操作”。

我确实知道您想要做的事情在 JPA 中是可能的,因为我最近自己在一个实体上做到了这一点:

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
@JoinColumn(name = "portal_logo_id", referencedColumnName = "id", nullable = true)
private PortalResourceModel logo;

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
@JoinColumn(name = "portal_favicon_id", referencedColumnName = "id", nullable = true)
private PortalResourceModel favicon;

我在 PortalResourceModel 中也没有 Logo 或网站图标的映射,因为关系的那一方不知道如何使用它。而且我无法从拥有方的多个关系到被映射方的单个关系进行通用映射。

关于java - 如何使用 JPA 将实体 A 映射到实体 B 两次以一对一关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44892128/

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