如果表具有 OneToMany 和 @Column(unique = true) 关系,如何在多个表中插入数据

How to insert data in multiple tables if tables have relationship OneToMany, and @Column(unique = true)

我有两个 tables MAKESMODELS。他们之间的关系@ManyToOne.

Table MAKES:

@Column(unique = true)
private String make;

Table MODELS:

@Column(unique = true)
private String model;

当我插入架构时 car:

makes.setMake("Porsche");
models.setModel("911");

em.persist(makes);
em.persist(models);

添加了数据,但如果Porsche存在于MAKES table中,则返回异常:... Duplicate entry 'Porsche' for key ....

如果在 sava 之前想要一个事务,则必须在两个事务中保存两个 table Make table 必须在保存之后检查唯一行。当在一个交易中创建一个异常时,交易反转。

发生此约束违反错误是为了防止您意外地执行您正在执行的操作 - 插入两个单独的 Make 实例,它们的 Make 列值为“Porsche”。如果您需要多个 Makes 的值为“Porsche”,则需要放宽限制以允许重复。

这似乎更有可能是有意为之,并且您有一个现有的 Make 想要关联到新模型或在新模型下。从数据库中读取现有的 make 并在 EntityManager 上下文中使用该托管实例,而不是尝试保留新的 Make 实例。

  Query q = em.createQuery("select m from Make m where m.make = 'Porsche'");
  Make Porsche = q.getSingleResult();
  models.setModel("911");
  models.setMake(Porsche);
  em.persist(models);