如果表具有 OneToMany 和 @Column(unique = true) 关系,如何在多个表中插入数据
How to insert data in multiple tables if tables have relationship OneToMany, and @Column(unique = true)
我有两个 tables MAKES
和 MODELS
。他们之间的关系@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);
我有两个 tables MAKES
和 MODELS
。他们之间的关系@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);