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



我有一对一的关系

@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允许的情况下看到throw。我想在spring-jpa级别阻止它我该怎么做?

我想你的问题是"如何使用同一地址进行两次阻止";并引发异常。我认为您必须以编程方式对此进行检查,类似于Assert.isTrue(customerRepository.countByAddress(address) == 0)

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

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

当您尝试保存分配了相同address实体的c2实体时,Hibernate将抛出DataIntegrityViolationException

最新更新