gpt4 book ai didi

java - Cascade persist 创建重复行?

转载 作者:行者123 更新时间:2023-11-29 12:10:34 25 4
gpt4 key购买 nike

我正在创建一个数据库实体对象 Order,并将其分配给 BookingCode 类型的多个实体。

问题:这会在数据库中创建一个订单,这没问题。但是订单本身有一个 @OneToOne OrderDescription,它在数据库中重复出现。

@Entity
public class BookingCode {
@Id
private Long id;

@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.DETACH})
private Order order;
}

@Entity
public class Order {
@Id
private Long id;

private String orderName;

@OneToOne(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
private OrderDescription description;
}

@Entity
public class OrderDescription {
@Id
private Long id;

//for simplicity just one text element; of course multiple fields in real life
private String text;

@OneToOne
private Order order;
}

测试:

Order order = new Order();
order.setOrderName("test");

OrderDescription d = new OrderDescription("testdescr");
d.setOrder(order);
order.setDescription(d);

List<BookingCodes> codes = new ArrayList<>();

BookingCode code = new BookingCode();
code.setOrder(order);
codes.add(order);

BookingCode code2 = new BookingCode();
code2.setOrder(order); //using the same offer entity!
codes.add(order2);

codes = dao.save(codes); //CrudRepository from Spring

dao.findOne(codes.get(0).getId()); //this works, find an order which has one of the OrderDescriptions

结果:在我的数据库中,我有两个 OrderDescription 条目,我希望只有一个条目,因为我重复使用了相同的 Order 对象并将其分配给不同的对象BookingCode 对象。

喜欢:

table order_descrption:
1;"de";"testdescr";"123456"
2;"de";"testdescr";"123456"

因为 OrderOrderDescription 有一个 @OneToOne 关系我什至不明白为什么使用 findOne()select 可以正常工作。因为在数据库中我现在有两个 OrderDescriptions 映射到同一个 Order,但是一个 Order 只能有一个。

最佳答案

先保存订单,然后将其分配给两个 bookingCode 。

关于java - Cascade persist 创建重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38073686/

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