【问题标题】:Hibernate adds unwanted unique key itself In @OneToMany mappingHibernate 在 @OneToMany 映射中自己添加不需要的唯一键
【发布时间】:2021-11-17 11:38:56
【问题描述】:

我的 Spring Boot 应用程序中有 3 个实体。 User,ItemOrders 我希望一个Orders 对象有多个Items,所以我在Orders 类中使用了@OneToMany 映射。

这是我的代码:

这是我的Item.java 文件

@Entity
public class Item implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="item_id")
private int itemId;
@Column
private String name;
@Column
private int price;
@Column
private String image;
@Column(name = "item_user_id")
private int userId;

//getters ssetters

}

这是我的Orders.java 文件

@Entity
public class Orders implements Serializable {

private static final long serialVersionUID = 3L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "order_id")
private int orderId;

@Column(name = "order_user_id")
private int userId;

@Column
@OneToMany
private List<Item> items = new ArrayList<>();

//getters setters

}

Hibernate 正在按我的预期生成 3 个表 ItemOrdersOrders_Item 来自上面的代码。

Orders 表有两列 order_idorder_user_id

还有 Orders_Item 表有两列orders_order_iditems_item_id

hibernate 正在使 items_item_id 成为唯一键,我不想要这个

Hibernate: alter table orders_items add constraint UK_9uu7j0okufkkanam94v8gb2qa unique (items_item_id)

所以我的问题是我不能插入一个具有多个 ID 的项目

如何解决这个问题?

【问题讨论】:

  • 你不能多次插入一个项目是什么意思?您还需要双向或单向关系吗?
  • 嗨@akortex。我想要 单向 映射。通过多次插入item,我的意思是我已经将数据库中的项目保存在item 表中。当我将item 保存到orders 表时,item_id 将被保存到orders_items 表中。所以items_item_id 上的unique key constraint 阻止了多次保存item_id

标签: java mysql spring-boot hibernate unique-constraint


【解决方案1】:

如果您想删除items_item_id 上的唯一约束,那么您有一个多对多关系,您希望将一个项目与多个订单相关联。将您的 @OneToMany 注释更改为 @ManyToMany 注释。

【讨论】:

  • 谢谢@Lee Greiner。成功了!
  • 此外,@ManyToMany 关系在建模为 Set 而不是 List 时性能更高。
猜你喜欢
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 2015-02-13
相关资源
最近更新 更多