gpt4 book ai didi

java - Hibernate 映射一对多关系 :Parent's PK to Child's FK

转载 作者:行者123 更新时间:2023-11-30 09:35:15 25 4
gpt4 key购买 nike

我有一个经典的一对多关系,在使用 Hibernate 保存它时,我无法将父项的 PK 列值传递给子项的 FK 列。
父类

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int holdingPK;

@OneToMany(mappedBy="holding",targetEntity=PolicyType.class,fetch=FetchType.LAZY, cascade = CascadeType.ALL)
@XmlElement(name = "Policy")
private Set<PolicyType> policy;

子类

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int policyPK;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="HoldingFK",nullable = false)
private HoldingType holding;

这里的 HoldingPK 是一个自动生成的序列列,代表主键。当我插入 Holding 行时会生成值。所以我想即时将 HoldingPK 值传递给 child 的 HoldingFK 列。
测试代码

HoldingType obj = new HoldingType();
obj.setCurrencyTypeCode("6");
obj.setHoldingKey("123");
Set<PolicyType> set = new TreeSet<PolicyType>();
PolicyType policy = new PolicyType();
policy.setJurisdiction("Haha");
set.add(policy);
obj.setPolicy(set);
session.save(obj);
transaction.commit();

所以我可以将 child 的其他值传递给子表列,只是父 PK 没有到达 child 的 FK 列。

在这里,我将 XML 文档值持久保存到数据库中。为此,我使用 JAXB 将 XML 编码为 Java 对象,然后使用 Hibernate 持久化对象。通过这种方式,我将 JAXB 生成的类与 Hibernate 一起重用,并且这些 PK 和 FK 元素在 XML 上不存在。这些特定于数据库。

最佳答案

您只是忘记了初始化双向关联的拥有方。您只初始化了反面(具有 mappedBy 属性的那一面)。 Hibernate 仅考虑拥有方以了解关联是否存在(没有 mappedBy 属性的一方)。

将此添加到您的代码中(在保存馆藏之前):

policy.setHolding(obj);

旁注:如果将 policy 字段(和访问器)命名为 policies,您的代码将更具可读性。它们有很多,所以它应该是复数形式。

关于java - Hibernate 映射一对多关系 :Parent's PK to Child's FK ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11452388/

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