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



我有两个表MAKESMODELS。它们之间的关系@ManyToOne.

TableMAKES:

@Column(unique = true)
private String make;

TableMODELS:

@Column(unique = true)
private String model;

插入模式car:

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

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

这个约束违反错误应该是为了防止您意外地做您在这里做的事情-插入两个独立的Make实例,它们的Make列值都为"Porsche"如果需要有多个值为"Porsche"的make,则需要放宽约束以允许重复。

看起来更有可能的是,这是有意的,并且您有一个现有的Make,您希望将其关联到新Model或在新Model下。从数据库中读取现有的make,并在EntityManager上下文中使用该管理实例,而不是尝试持久化一个新的make实例。

Ie

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);

你必须在两个Transaction中保存两个表,如果你想在sava之前保存一个Transaction,那么Make table必须在保存它之后检查唯一行。当在一个事务中创建一个异常时,事务反转。

最新更新