当前位置: 首页 > 知识库问答 >
问题:

Spring JPA一对一映射允许保存更多项目

庞鸿骞
2023-03-14

我有一对一的关系

@OneToOne(fetch = FetchType.LAZY) 
@JoinColumn( name = "address_id" )
private Address address;

@OneToOne(mappedBy = "address")
private Customer customer;

我可以添加多个地址。例如

Customer c1 = new Customer();
Address address = new Address();
addressRepo.save(address);
Customre c2 = new Customer();
c1.setAddress(address);
customerRopesitory.save(c1);
c2.setAddress(address);
customerRopesitory.save(c2);

我想看到address2被添加时抛出,但jpa允许。我想在spring jpa级别阻止这一点,我该怎么做?

共有2个答案

冉子石
2023-03-14

如果将联接列设置为唯一:

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "address_id", unique = true)
private Address address;

当您试图保存分配有相同地址的实体时,Hibernate将抛出DataIntegrityViolationException。

芮念
2023-03-14

我猜您的问题是“如何阻止使用同一地址两次”,并引发异常。我认为您必须以编程方式检查这一点,比如断言。isTrue(customerRepository.countByAddress(address)==0)。

 类似资料:
  • 有两张数据表,其中A表的某个字段的值指向B表的主键。因为B表的任何一条记录理论上可以对应A表的多条记录,所以称这种 映射为B表对A表数据的一对多映射。 上述结构,如果用 POJO 来表示的话,可以参看下图: 如上图,一个 Master 自然就能对应多个 Pet ,所以, Master.pets (一个 List<Pet>) 就可以指向多个 Pet 对象, 那么我们说 Master.pets 就是

  • 主要内容:@ManyToOne 示例,程序输出结果多对一映射表示实体集合可以与相似实体关联的单值关联。 因此,在关系数据库中,实体的多于一行可以引用另一个实体的相似行。 完整的项目目录结构如下所示 - @ManyToOne 示例 在这个例子中,我们将创建一个学生和图书库之间的多对一关系,多个学生可以发布同一本书。 这个例子包含以下步骤 - 第1步: 在包中创建一个实体类,包含学生ID(s_id)和学生姓名(s_name),其中包含一个包含库类型对

  • 主要内容:@OneToMany 示例,程序输出结果一对多映射进入集合值关联的类别,其中实体与其他实体的集合关联。 因此,在这种类型的关联中,一个实体的实例可以映射到另一个实体的任意数量的实例。 完整的项目目录结构如下所示 - @OneToMany 示例 在这个例子中,我们将创建一个学生和图书库之间的一对多系,这样一个学生能发放多种类型的图书。 这个例子包含以下步骤 - 第1步: 在包下创建一个实体类,它包含学生ID(s_id),学生姓名(s_na

  • 我有一个关于mapstruct中@ManyToOne映射的问题。我有两个表 第一个: 第二个是: 我有一个这样的箱子: 和MemberDto作为实体相同。 我需要使用mapstruct进行如下映射: 我需要填写名单成员;但我不明白怎么做。

  • 如何用额外的列保存多对多映射对象?专列为“审批”。对于多对多注释,我只调用了setUsersDocuments(users),它工作正常...我怎样才能使它工作与额外的列? 文件 用户类 主键 多对多表 正在保存单据 编辑:unsuccessfull保存对象-Document.GetDocumentsForUsers().Add(userDocuments)null. 编辑:错误 null

  • 一个udit.java Chapter.java 审计控制员。JAVA