gpt4 book ai didi

java - 如何从父序列值填充子复合键(Hibernate、JPA)?

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:14 25 4
gpt4 key购买 nike

我遇到的情况是我有一个名为 Order 的类,并生成了 OrderID :

    @Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_gen")
@SequenceGenerator(name = "seq_gen", sequenceName = "OID_SEQ1")
@Column(name = "ORDER_ID",nullable = false)
public long getOrderId()
{
return this.OrderId;
}

它还有一个与名为 items 的类/表的一对多映射:

    @OneToMany(fetch = FetchType.LAZY,mappedBy = "orders",targetEntity = Items.class)
public Set<Items> getItems()
{
return this.items;
}

items 类中有一个嵌入/复合 ID:

    @EmbeddedId
@AttributeOverrides({@AttributeOverride(name = "OrderId",column = @Column(name = "ORDER_ID",nullable = false)),
@AttributeOverride(name = "role",column = @Column(name = "ROLE",nullable = false,length = 10))})
public ItemId getId()
{
return this.id;
}

我的问题是这个id的一部分是父Order.class的主键。换句话说,序列值。这意味着我无法在任何地方以及当我调用时设置此值:

entitymanager.persist(order);

父 Order 对象写入数据库,但 Set 中的任何项目都不会保留。只有一条insert语句,Items对象中对orderId的引用全部为null???

如何使用生成的 Seq ID 填充这些 ID?

非常感谢您对此提供的任何帮助!

最佳答案

最终在另一篇文章的帮助下解决了这个问题: onetomany-and-composite-primary-keys答案其实很简单。我们需要使用 Casade 注释将 Id 级联到子对象。所以上面的一对多映射就变成了:

@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY,mappedBy = "orders",targetEntity = Items.class) public Set<Items> getItems() {     return this.items; } 

在实现此审查时,不同的级联类型。

祝你好运

关于java - 如何从父序列值填充子复合键(Hibernate、JPA)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7850525/

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